🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] <br> ### Scripts 脚本介绍 在Postman中,有个叫“Sandbox”的运行环境,是一个JavaScript执行环境,所以我们可以编写javaScript脚本来扩展我们的业务需求行为。最常用的实现包括但不限于: - 构造动态参数 - 请求间数据传递 - 断言 在Postman接口测试过程中,有两个位置我们可以添加自己的脚本,分别是 - pre-request script 作用于请求之前,一般用于数据初始化 - test script 作用于获得响应之后,主要用于断言(解析响应内容,与预期值进行对比) ![](https://box.kancloud.cn/4e5819b18948cb73d6f533abcb57da9a_826x179.jpg) *注意:Collection、Folder、Request 这三个组件中都可以添加pre-request script 和 test script,只是他们的作用范围和顺序稍有不同而已* ![](https://box.kancloud.cn/acf6791030b458fd2cfb1ddeee3df8a3_1315x458.jpg) ### 通过控制台调试脚本 这里用一个简单的日志打印脚本语句`console.log()`,分别在Pre-request Script 和 Tests 两个Tab下打印一句话,然后在控制台中查看打印结果 ![](https://box.kancloud.cn/7312ac14cafb34ea3ec396aa5b96bf89_818x146.jpg) ![](https://box.kancloud.cn/559dfe8c3f88fdf44c7126a0e5b33aab_817x151.jpg) 打开控制台 ![](https://box.kancloud.cn/268a208f9b4984966fe777c9a7d66fab_1110x438.jpg) 点击"Send"发送请求后,即可在控制台中显示打印结果 ![](https://box.kancloud.cn/5c3e32b4ce60d07168cd937c4eda7033_989x240.jpg) ### Script 代码片段介绍 #### 变量操作 ##### 环境变量 ```javascript // 设置环境变量 pm.environment.set("timestampsParam",new Date()); // 获取环境变量 pm.environment.get("timestampsParam"); // 删除环境变量 pm.environment.unset("timestampsParam"); ``` ##### 全局变量 ```javascript // 设置全局变量 pm.globals.set("variable_key", "variable_value"); // 获取全局变量 pm.globals.get("variable_key"); // 删除全局变量 pm.globals.unset("variable_key"); ``` ##### 变量 ```javascript // 在全局变量和活动环境中搜索变量。 pm.variables.get("variable_key"); ``` ##### Data 变量 Data变量,只有在Collection运行中使用,所有的Data变量会存储在`data`对象内,假如存在变量value,则data.value可获得当前迭代时的value变量值。 ```javascript var jsonData = JSON.parse(responseBody); tests['Response has data value'] = jsonData.form.foo === data.value ``` #### JSON对象与字符串转换 ##### 将JSON对象(对象或数组)转JSON字符串 ```javascript var array = [1, 2, 3, 4]; var jsonString = JSON.stringify(array) ``` ##### 将JSON字符串转JSON对象Object ```javascript var array = "[1, 2, 3, 4]"; var jsonObject = JSON.parse(array); ``` ##### XML字符串转JSON对象Object ```javascript var jsonObject = xml2Json(XMLString); ``` #### 请求/响应相关属性 ##### 请求属性 **request:** 对象类型, *只读* ```javascript console.log("request中的form-data对象:",request.data); console.log("request中的headers对象:",request.headers); console.log("request中的meth字符串:",request.method); console.log("request中的url字符串:",request.url); ``` ![](https://box.kancloud.cn/09515ebe6d22112e5a5c04bdbe1591d7_879x582.jpg) ##### 响应属性 响应属性,只能在Tests Script中使用 **responseBody:** 响应body的原始字符串 **responseTime:** 响应时间,毫秒 **responseCode:** 响应码对象类型 **tests:** 检查点对象类型,需要我们自动填充检查点 ```javascript console.log("body字符串:",responseBody); console.log("响应时间:",responseTime); console.log("响应码对象:",responseCode); tests["响应时间小于1000毫秒"]=responseTime<1000; console.log("检查点对象:",tests) ``` 检查点运行结果显示如下: ![](https://box.kancloud.cn/6f940d3055293fd2a76dfa39d68749fb_461x140.jpg) 控制台信息输出如下: ![](https://box.kancloud.cn/8cfddadd97ee32c67056d4b12e9192b2_788x672.jpg) #### 响应结果解析 Postman的请求响应信息,会保存在`pm.response`对象中。 ##### 将响应内容转成JSON对象 ```javascript pm.response.json() ``` ##### 将响应内容转成text字符串 ```javascript pm.response.text() ``` #### 发送异步HTTP请求 ```javascript pm.sendRequest("http://postman-echo.com/get", function (err, response) { console.log(response.json()); }); ``` ### 断言 断言(检查点)的写法有多种,但是实质上都是往一个叫`tests`的字典对象中填充内容,包含“检查点名称”与“检查点结果”,检查点名称是一个描述字符串,而检查点结果则是一个布尔值(表达式), #### 断言的两种原生写法 **方法一:** ```javascript tests["响应时间小于1000毫秒"]=responseTime<1000; // 检查点结果是一个表达式 ``` 运行后,检查点结果在“Test Results”中显示如下 ![](https://box.kancloud.cn/45892945e83c6836dd6409a37da8ae73_452x142.jpg) **方法二:** ```javascript pm.test("检查点名称",function(){ // 检查点结果是一个回调函数(这个回调函数的返回值也将会是一个布尔值) pm.expect(...); }); ``` #### 响应Body为字符串时,断言包含特定字符串 ```javascript pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); ``` #### 响应Body为字符串时,断言完全匹配特定字符串 ```javascript pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); }); ``` #### 响应Body为JSON格式时,断言具体值 ```javascript pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); ``` #### 断言响应时间 ```javascript pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); }); ``` #### 断言响应码 ```javascript pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); ``` ### 全局函数 pm.* 详解 pm对象,包含正在执行的脚本的所有信息。 - 异步发送HTTP/HTTPS请求。 pm.sendRequest:Function ```javascript // 发送一个GET请求 pm.sendRequest('https://postman-echo.com/get?foo1=bar1&foo2=bar2', function (err, res) { if (err) { console.log(err); } else { console.log(res.text()); } });; // 发送一个带参数的POST请求 const echoPostRequest = { url: 'https://postman-echo.com/post', method: 'POST', header: 'headername1:value1', body: { mode: 'raw', raw: JSON.stringify({ key: 'this is json' }) } }; pm.sendRequest(echoPostRequest, function (err, res) { console.log(err ? err : res.json()); }); ``` - 判断全局变量是否存在 pm.globals.has(variableName:String):function → Boolean - 获取全局变量 pm.globals.get(variableName:String):function → * - 设置全局变量 pm.globals.set(variableName:String, variableValue:String):function - 删除某个全局变量 pm.globals.unset(variableName:String):function - 清空所有全局变量 pm.globals.clear():function - 判断环境变量是否存在 pm.environment.has(variableName:String):function → Boolean - 获取环境变量 pm.environment.get(variableName:String):function → * - 设置环境变量 pm.environment.set(variableName:String, variableValue:String):function - 删除某环境变量 pm.environment.unset(variableName:String):function - 清空环境变量 pm.environment.clear():function - 获取某变量 pm.variables.get(variableName:String):function → * - 返回请求url pm.request.url:Url - 返回请求header 列表 pm.request.headers:HeaderList - 返回响应码,如 200 pm.response.code:Number - 返回响应消息,如“OK” pm.response.reason():Function → String - 返回响应头headers列表 pm.response.headers:HeaderList - 返回响应时间,毫秒 pm.response.responseTime:Number - 返回响应Body字符串 pm.response.text():Function → String - 返回响应Body json对象 pm.response.json():Function → Object - 判断是否存在某cookie pm.cookies.has(cookieName:String):Function → Boolean - 获取某cookie pm.cookies.get(cookieName:String):Function → String - 编写断言 pm.test(testName:String, specFunction:Function):Function ```javascript pm.test("response should be okay to process", function () { pm.response.to.not.be.error; pm.response.to.have.jsonBody(''); pm.response.to.not.have.jsonBody('error'); }); ``` - 通用的断言函数 pm.expect(assertion:*):Function → Assertion <hr style="margin-top:100px"> :-: ![](https://box.kancloud.cn/331f659e8e6cddb0d9f182e00e32803f_258x258.jpg) ***微信扫一扫,关注“python测试开发圈”,获取更多测试开发分享!***