测试脚本
Postman工具借助测试脚本来帮助用户自动判断接口请求响应是否正确,相当于LoadRunner工具中的检查点或JMeter中的断言
Tests基础知识
如果将预请求脚本看成是接口的前提条件,那么测试脚本就是"预期结果",借助Tests能实现接口响应的自动检验。同样,用户可以使用JavaScript语言为每个请求编写和运行测试脚本
注:
1、在Tests脚本编辑区旁边Postman同样提供了常用的代码片段:通过点击脚本名字来向编辑区域添加对应的代码
2、理论上来说,用户可以为某个请求添加任意多个测试脚本,这取决于想要的测试点
3、Postman每次发送请求时都要执行测试。结果显示在"Response"下的"Test Results"选项卡中
⑴选项卡标题显示执行和通过测试的数量,并在选项卡中列出了详细的测试结果。如果测试结果为真,则显示PASS,反正则显示FAIL
运行脚本要求
1、测试脚本在发送请求,并从服务器收到响应之后才开始执行
2、pre-request脚本,是在对API进行请求之前的脚本,一般用于动态生成参数、JSON数据包、链接地址等
3、test脚本,其实更应该叫post-request,实在完成API访问并得到其response回应之后运行的脚本,一般用于获取response的内容,用于之后对于别的资源的请求,如获取页面标题和内容等
4、需要注意:pre-request脚本,在里面直接写代码就可以了;但是test脚本需要在指定的函数pm.test(...)中执行才会被识别,且作为test脚本运行(这里感觉就跟在脚本中发送请求差不多了,请求和处理函数要在sendRequest函数中使用)
例:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
注:
1、pm.test()中第一个参数是测试描述(会在测试结果栏显示,应和其它测试描述做以区分),第二个参数是一个函数,具体执行代码都在这个函数中运行
2、pm对象是Postman的主要对象,所有的内置函数,数据调用等,都需要通过它来实现
操作变量、发送请求
在测试脚本中与变量操作的方法主要有如下几个方法:在测试脚本中操作变量与在预请求脚本中操作变量的方法一致
函数名 | 描述 |
pm.globals.set("variable_key", "variable_value"); | 设置全局变量 |
pm.environment.set("variable_key", "variable_value"); | 设置环境变量 |
pm.globals.get("variable_key"); | 获取全局变量(的值) |
pm.environment.get("variable_key"); | 获取环境变量(的值) |
pm.variables.get("variable_key"); | 获取变量(的值) |
pm.globals.unset("variable_key"); | 清除全局变量 |
pm.environment.unset("variable_key"); | 清除环境变量 |
pm.sendRequest("URL", function (err, response) { console.log(response.json()); | 发送一个请求(GET请求) |
注:
上面8个方法的使用方法和在Pre-request script中的使用方法一致,这里就不介绍了
检查响应体中是否包含一个字符串
1、Response body:Contains string
2、作用:检查响应体中是否包含一个字符串
语法:
pm.test("测试描述", function () {
pm.expect(pm.response.text()).to.include("需要测试的字符串");
});
//pm.response.text()返回的是字符串类型的
//pm.response.json()返回的是json类型的
例:检查响应体中是否包含一个字符串
注:感觉代码意思为
1、断言函数:expect()
2、返回响应体:pm.response.text(),这里是以字符串形式返回,也可以pm.response.json()以json格式返回
检查响应体是否等于一个字符串
1、Response body:Is equal to a string
2、作用:用于检查响应体是否等于一个字符串(这里要求响应体必须等于被测试的整个某个字符串,而不是说响应体包含字符串的一部分)
语法:
pm.test("测试描述", function () {
pm.response.to.have.body("需要测试的字符串");
});
检查响应体的键的值
1、Response body:JSON value check
2、作用:检查指定键的值是否与预期一致
语法:
pm.test("测试描述", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.需要测试的键).to.eql(测试的键预期的结果);
});
例:
步骤1:先查看正确的响应
注:从上图可以看出
1、需要被测试的键"test"是最外层键"args"的值,因此需要先将"test"键提取出来再进行判断(不处理的话postman断言会失败)
2、需要被测试的键"url"直接位于最外层,所以不需要进行处理
步骤2:构建脚本
检查请求头中的键
1、Response headers:Content-Type header check
2、作用:检查请求头中某个键是否与预期结果一致
语法:
pm.test("测试描述", function () {
pm.response.to.have.header("需要测试的请求头的键");
});
注:
此方法只能测试请求头的键,不能测试键的值
例:
检查响应时间
1、Response time is less than 200ms
2、作用:用于检查请求的响应时间是否小于指定时间,单位为ms
语法:
pm.test("测试描述", function () {
pm.expect(pm.response.responseTime).to.be.below(时间);
});
例:
检查响应状态码
1、Status code:code is 200
2、作用:检查响应的状态码是否为预期
语法:
pm.test("测试描述", function () {
pm.response.to.have.status(状态码);
});
例:
检查响应状态码中的字符串
1、Status code:code name has string
2、作用为:检查响应状态码中是否存在某个指定的字符串
语法:
pm.test("测试描述", function () {
pm.response.to.have.status("需要检查的字符串");
});
例:
检查响应状态码是否为指定状态码中的一个
1、Status code:Successful POST request
2、作用:用于检查响应状态码是否为指定状态码中的一个
语法:
pm.test("测试描述", function () {
pm.expect(pm.response.code).to.be.oneOf([需要测试的状态码列表]);
});
例:
使用轻量级验证器
1、Use Tiny Validator for JSON data
2、参数:可以修改items里面的键值对来对应验证json的参数
语法:
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function() {
pm.expect(tv4.validate(data1, schema)).to.be.true;
pm.expect(tv4.validate(data2, schema)).to.be.true;
});
将XML转为JSON格式
1、Response body:Convert XML body to a JSON Object
2、作用:假如响应体是XML格式,将其转换成JSON对象,再对其进行操作
语法:
var jsonObject = xml2Json(responseBody);
参数:(默认不需要设置参数,为接口的response)需要转换的xml
测试结果备注
1、返回值就不是简单的return语句可以,必须要通过Postman自带的对象或方法才可以,一般是通过pm.expect()或tests[ ]这两个地方返回测试结果
2、这些方法名看起来都很容易理解,一般都会叫pm.expect()或.to.be()或.to.have()这样的,字面意思就是期待什么或要求它必须是什么或必须有什么,才能通过测试。
3、另外,同样的测试结果,实际上还有更简单的写法,即不通过pm对象,而是内置tests对象,常用操作如下:
# 响应时间必须少于200毫秒
tests["Response time is less than 200ms"] = responseTime < 200;
# 判断返回代码是否等于某一个指定的代码
tests["Status code name has string"] = responseCode.name.has("Created");
看这个用法,猜测tests是一个JSON格式的对象,tests[...]括号内的字符串是测试的描述, =后面是判断语句,然后将True或False赋予为tests[..]的值,然后postman轮训所有tests对象里的参数,并返回pass与否的结果