postman 为每一个 HTTP 请求提供了 pre-request script 用于存放在该请求进行之前执行的脚本,tests 用于存放在该请求获取响应之后执行的脚本,一般用于根据响应信息进行断言测试;
这里需要注意的是,postman 分为 native app、 chrome app 两个版本,native app 中的部分对象 chrome app 中是不可使用的,chrome app 中所有的对象语法,native app 中都兼容,特别是 native app 的 pre-request script 、tests 中的 snappets 中的自动生成示例代码,这些代码基本在 chrome app 中是无法运行的;
获取变量
//通用语法
postman.getGlobalVariable("key"); //获取全局变量
postman.getEnvironmentVariable("key"); //获取环境变量
//postman native app 特有语法
pm.globals.get("key"); //获取全局变量
pm.environment.get("key"); //获取环境变量
设置变量
//通用语法
postman.setGlobalVariable("key","value"); //设置全局变量
postman.setEnvironmentVariable("key","value"); //设置环境变量
//postman native app 特有语法
pm.globals.get("key","value"); //设置全局变量
pm.environment.get("key","value"); //设置环境变量
清除变量
//通用语法
postman.clearGlobalVariable("key"); //清除全局变量
postman.clearEnvironmentVariable("key"); //清除环境变量
//postman native app 特有语法
pm.globals.unset("key"); //清除全局变量
pm.environment.unset("key"); //清除环境变量
将数组,嵌套对象储存到全局变量、环境变量中
有时候,我们要将数组,嵌套对象,json 对象储存到环境变量,全局变量,可以使用 postman 提供的 JSON 工具类,将其储存为 json 格式的字符串,如下:
//将数组储存到环境变量中
var array = [1, 2, 3, 4];
postman.setEnvironmentVariable("array", JSON.stringify(array));
//将嵌套对象储存到环境变量中
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
postman.setEnvironmentVariable("obj", JSON.stringify(obj));
//从环境变量中获取数组对象
var array = JSON.parse(postman.getEnvironmentVariable("array"));
//从环境变量中获取嵌套对象/json对象
var obj = JSON.parse(postman.getEnvironmentVariable("obj"));
postman 为请求提供了断言脚本,编写在请求的 tests 中,在运行该HTTP请求获取响应后,会自动执行 tests 脚本的内容,其中的断言结果会显示在 Test Results 面板中;
postman 提供的断言语法十分简单,为 tests["断言名称"] = 判断表达式,如下:
//判断响应正文是否式一个字符串
tests["Body is correct"] = responseBody === "response_body_string";
//判断响应时间是否小于200ms
tests["Response time is less than 200ms"] = responseTime < 200;
同时 postman 还对响应的各个常用部分封装为对象,可以直接调用;
responseCode | 响应状态 |
responseHeaders | 响应头 |
responseBody | 响应正文 |
responseTime | 发出请求到接收响应的时间(单位:ms) |
一些常用示例如下:
响应状态校验
//验证响应码为 200
tests["Status code is 200"] = responseCode.code === 200;
//校验响应状态代码包含某个值
tests["Status code name has string"] = responseCode.name.has("OK");
响应头校验
//获取响应头的属性,以 “Pragma” 属性为例:
var pragmaVal = postman.getResponseHeader("Pragma");
var paramVal =responseHeaders.Pragma;
//验证响应头是否存在某个属性
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); //不区分大小写
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type"); //区分大小写
//验证响应头 Pragma 属性是否为 “no-cache”
tests["Pragma is no-cache"] = postman.getResponseHeader("Pragma") === "no-cache"
tests["Pragma is no-cache"] = responseHeaders.Pragma === "no-cache"
响应正文校验
//将 json 格式的响应正文转化为 json 对象,并检查 json 值;
var data = JSON.parse(responseBody);
tests["Your test name"] = data.value === 100;
//将 xml 格式的响应正文转化为 json 对象,并检查 json 值;
var jsonObject = xml2Json(responseBody);
tests["Your test name"] = data.value === 100;
//检查响应正文中是否包含某个字符串
tests["Body matches string"] = responseBody.has("string_you_want_to_search");
响应时间校验
//校验响应时间小于200ms
tests["Response time is less than 200ms"] = responseTime < 200;
//校验响应时间在一个特定的范围内(包括下限和上限)
tests["Response time is acceptable"] = _.inRange(responseTime, 100, 1001);
tests["Response time is acceptable"] = responseTime >= 100 && responseTime <= 1001; //或者直接这样
更多详见官方文档:https://www.getpostman.com/docs/v6/postman/scripts/test_examples