断言:
如何使用?
状态码的断言:
- 快捷代码
Status code: Code is 200
- 断言代码
pm.test("Status code is 200", function () { pm.response.to.have.status(200); });
例子:断言状态码为200 - 代码
pm.test("状态码为200", function () { pm.response.to.have.status(200); });
返回状态:
json数据的断言:
- 快捷代码
Response body:JSON value check
- 断言代码
pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); });
- 例子:断言test值内的taost的值
返回的数据为:
{ "success": true, "code": 10000, "test": ["taost":"成功","num":1]", "data": "50c04c64-c26e-4e66-9d67-d4125b441821" }
- 代码:
pm.test("taost为成功", function () { var jsonData = pm.response.json(); pm.expect(jsonData.test[0].taost).to.eql("成功"); });
返回状态:
断言返回数据是否包含某个字符:
- 快捷代码
Response body:Contains string
- 断言代码
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); });
- 例子:断言返回的内容是否包含成功
返回的数据为:
{ "success": true, "code": 10000, "test": ["taost":"成功","num":1]", "data": "50c04c64-c26e-4e66-9d67-d4125b441821" }
- 代码:
pm.test("返回的body内包含成功", function () { pm.expect(pm.response.text()).to.include("成功"); });
返回状态:
断言返回数据是否与预期字符相同:
- 快捷代码
Response body:is equal to a string
- 断言代码
pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); });
- 例子:断言返回的内容是否与预期字符相同
返回的数据为:
{ "success": true, "code": 10000 }
- 代码:
pm.test("返回的字符相同", function () { pm.response.to.have.body('{ "success": true, "code": 10000 }'); });
返回状态:
断言返回头中是否包含指定的响应的头部信息:
-
快捷代码
Response headers:Content-Type headers check
-
断言代码
pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });
-
例子:断言返回头是否包含Date头部信息
返回的数据为:
-
代码:
pm.test("返回头包含Date", function () { pm.response.to.have.header("Date"); });
返回状态:
全局变量&环境变量:
全局变量&环境变量的设置:
- 手动设置变量
-
initial value与current value的注意事项:
variable: 变量名
initial value: 分享出去给team中的人用时的变量值,比如通过newman命令测试接口使用的环境变量的值就是它
current value: 当前自己使用该变量时变量的值
所以initial value与current value的变量值一般都要有并相同 - 如何使用?
{{变量名}}即可使用
例子:变量名为url,变量值为http://www.baidu.com
等同于get http://www.baidu.com - 代码设置全局变量
- 快捷代码
set a globals variable
- 断言代码
pm.globals.set("variable_key", "variable_value");
- 例子:
pm.globals.set("url", "http://www.baidu.com");
- 快捷代码
- 代码设置环境变量
- 快捷代码
set an environmentvariable
- 断言代码
pm.environment.set("variable_key", "variable_value");
- 例子:
pm.environment.set("url", "http://www.baidu.com");
- 快捷代码
- 高阶用法:
比如把返回值设置为变量
例子:把返回code的值设置为全局变量
获取返回值并以json格式展示:pm.response.json()
获取返回值并以text格式展示:pm.response.text()
返回的值:{ "success": true, "code": 10000, "message": "操作成功!", "data": "4170537f-449d-4697-a94e-6dcfcb5add83" }
代码:var p =pm.response.json(); pm.globals.set("code", p.code);
此时,全局变量增加一个code的变量
请求增加cookies:
-
单个请求使用cookies:
直接在hesders下增加Cookie就行了,如图:
-
指定域名使用cookies:
比如需要增加一下cookie
点击cookies:
输入需要使用cookie的域名比如www.test.com
在该域名下添加cookie:
注意假如是多个cookie则使用逗号分割比如:JSESSIONID=QSGASEG7ASD78FS5,TT=SDASF74521135;
前置脚本(异步请求):
发送GET请求
- 代码片:
const url = 'https://free-api.heweather.net/s6/weather/now?location=101100102&key=db86a5196f304e52a4369818c5182e60';
// 发送get请求
pm.sendRequest(url, function (err, res) {
console.log(err ? err : res.text()); // 控制台打印请求文本
});
可配合pm.environment.set(key:value)来将响应中的数据保存到环境变量中以供本次请求使用
示例: 使用请求前脚本获取token并使用,
例如:
const url = 'https://free-api.heweather.net/s6/weather/now?location=101100102&key=db86a5196f304e52a4369818c5182e60';
// 发送get请求
pm.sendRequest(url, function (err, res) {
console.log(err ? err : json=res.json()); // 控制台打印请求文本
pm.environment.set("cnty",json.HeWeather6[0].basic.cnty); //将返回值存至环境变量
});
发送表单格式Post请求
- 代码片:
//构造一个登录请求
const loginRequest = {
url: 'http://dict.youdao.com/suggest/',
method: "POST",
body: {
mode: 'urlencoded', // 模式为表单url编码模式
urlencoded: 'name=张三&password=123456'
}
};
// 发送请求
pm.sendRequest(loginRequest, function (err, res) {
console.log(err ? err : res.text());
});
可配合pm.environment.set(key:value)来将响应中的数据保存到环境变量中以供本次请求使用
示例: 使用请求前脚本获取token并使用,
例如:
//构造一个登录请求
const loginRequest = {
url: 'http://dict.youdao.com/suggest/',
method: "POST",
body: {
mode: 'urlencoded', // 模式为表单url编码模式
urlencoded: 'name=张三&password=123456'
}
};
// 发送请求
pm.sendRequest(loginRequest, function (err, res) {
console.log(err ? err : text=res.text());
pm.environment.set("cnty",text);
});
发送JSON格式请求
- 代码片:
// 构造一个注册请求
const regRequest = {
url: 'http://dict.youdao.com/suggest/',
method: 'POST',
header: {"Content-Type": "application/json"}, //注意要在Header中声明内容使用的类型
body: {
mode: 'raw', // 使用raw(原始)格式
raw: JSON.stringify({ name: '小小', password: '123456' }) //要将JSON对象转为文本发送
}
};
//发送请求
pm.sendRequest(regRequest, function (err, res) {
console.log(err ? err : res.json()); // 响应为JSON格式可以使用res.json()获取到JSON对象
});
可配合pm.environment.set(key:value)来将响应中的数据保存到环境变量中以供本次请求使用
示例: 使用请求前脚本获取token并使用,
例如:
// 构造一个注册请求
const regRequest = {
url: 'http://dict.youdao.com/suggest/',
method: 'POST',
header: {"Content-Type": "application/json"}, //注意要在Header中声明内容使用的类型
body: {
mode: 'raw', // 使用raw(原始)格式
raw: JSON.stringify({ name: '小小', password: '123456' }) //要将JSON对象转为文本发送
}
};
//发送请求
pm.sendRequest(regRequest, function (err, res) {
console.log(err ? err : json=res.json()); // 响应为JSON格式可以使用res.json()获取到JSON对象
pm.environment.set("cnty",json.HeWeather6[0].basic.cnty);
});
发送XML格式请求
- 代码片:
//构造请求
const demoRequest = {
url: 'http://httpbin.org/post',
method: 'POST',
header: {"Content-Type": "application/xml"}, // 请求头种指定内容格式
body: {
mode: 'raw',
raw: '<xml>hello</xml>' // 按文本格式发送xml
}
};
//发送请求
pm.sendRequest(demoRequest, function (err, res) {
console.log(err ? err : res.json());
});
可配合pm.environment.set(key:value)来将响应中的数据保存到环境变量中以供本次请求使用
示例: 使用请求前脚本获取token并使用,
例如:
//构造请求
const demoRequest = {
url: 'http://httpbin.org/post',
method: 'POST',
header: {"Content-Type": "application/xml"}, // 请求头种指定内容格式
body: {
mode: 'raw',
raw: '<xml>hello</xml>' // 按文本格式发送xml
}
};
//发送请求
pm.sendRequest(demoRequest, function (err, res) {
console.log(err ? err : json=res.json());
pm.environment.set("cnty",json.HeWeather6[0].basic.cnty);
});
参数化&测试报告:
参数化
使用场景:针对单个接口,存在大量数据需要批量测试的情况,我们通过读取外部存放的文件进行逐行执行脚本
csv格式:
注意:乱码问题使用notepad++或者默认文本编辑器转换utf-8格式
json格式:[{"name":"xiaoming","avg":"18"}, {"name":"xiaohua","avg":"24"}]
-
如何导入?
-
如何使用?
获取参数的2种方法:- 请求参数可以通过{{name}}来引用
- 断言中的数据,由于是在Tests中编写脚本,不能通过{{name}}来引用,可以通过变量data来获取
- 例如
var name= data.name;
- 批量断言代码
下面展示一些常用批量断言代码
。
tests['成功']= String(data.预期结果).match(pm.response.text()); //判断返回结果是否被预期结果包含
tests['成功']= String(data.预期结果)===pm.response.text();//判断返回结果是否与预期结果相同
- 批量导入headers(请在前置脚本使用,多个头请用标点符合分割):
// headers的数据为 "X-Test-Request:f533b0532a413f115dsaasdd5,Content-Type:application/json"
var list=String(data.headers).split("\r\n,"); //分割成列表
for (i in list){
pm.request.headers.add(list[i]); //使用for循环依次添加headers
}
测试报告
- 前置软件:已安装node
node -v
查看
安装Newman:cmd输入npn install -g newman
,newman -v
查看是否安装完成
安装newman-reporter-html:cmd输入npm install -g newman-reporter-html
- 导出测试集和环境变量:
-
测试报告的生成:
将测试集文件,环境变量,csv参数文件放在同一个文件夹,然后在当前目录打开cdm,并执行生成报告命令
命令:newman run 测试集文件 -g 全局变量文件 -e 环境变量文件 -d csv参数文件 -r html
执行完成会在当前文件夹生成newman文件夹,并在newman文件夹下生成html格式的测试报告 -
Newman参数介绍
1、使用 -n 参数来设置集合迭代的次数
newman run 集合名称.json -n 集合迭代次数
2、使用 -d 参数来设置集合使用的参数化数据文件
newman run 集合名称.json -d 参数路径\参数文件名称
3、使用 -e 参数设置集合环境变量文件
newman run 集合名称.json -e 参数路径\环境变量文件名称
4、使用 -g 参数指定全局变量的文件地址或ur
newman run 集合名称.json -e 参数路径\全局环境变量文件名称
5、 --folder 运行集合中指定的文件夹,如集合下存在文件(前端接口),使用该命名,则只运行集合中前端接口文件下的接口
6、–export-environment导出该运行集合中的环境变量文件 可指定路径和名称
newman run d:\登录测试\.postman_collection.json -e d:\测试项目.postman_environment.json -d d:\搜索测试.csv ----export-environment d:\test
7、–export-globals导出全局环境变量
8、–export-collection导出集合文件
9、–timeout (ms) 设置整个集合运行完成执行的时间
10、–timeport-request (ms) 指定等待请求返回响应的时间
11、–timeout-script (ms)指定等待脚本执行完成的时间