上次讲到了接口测试的流程和Postman工具的简单介绍。这次我们来继续了解Postman的接口关联、动态参数、断言等相关的使用。让我们现在开始吧!!!
一、Postman的接口关联
在面试的过程中,面试官经常会问:你们是怎样实现接口的关联?下一个接口的参数是怎样使用上一个接口的返回值?如果使用的Postman工具的话,一般是在Tests里写代码来提取上一接口的值保存到全局变量中,有以下几种方法:
1.通过JSON提取器来实现
//使用json提取器把responseBody返回值转化成一个字典。
var jd = JSON.parse(responseBody)
//提取access_token,并且设置为全局变量(就是在任何接口请求都可以访问的变量)
pm.globals.set("access_token",jd.access_token);
2.正则表达式提取器
var token = responseBody.match(new RegExp('"access_token":"(.*?)"'));
pm.globals.set("access_token",token[1]);
3.从响应头里面中去提取
var types = postman.getResponseHeader("Content‐Type")
pm.globals.set("types ",types);
4.从Cookie里面中去提取
var csrf_token = postman.getResponseCookie('csrf_token');
pm.globals.set("csrf_token ",csrf_token );
提取到的全局变量通过{{变量名}}来使用该变量的值,如下图所示:
二、Postman的动态参数
接口测试中常常会出现接口的参数不能写死,必须使用随机数来实现,此时Postman有两种方式可以实现。
1.内置的动态参数
{{$timestamp}} 时间戳
{{$randomInt}} 随机的0-1000的整数
{{$guid}} 随机的很长的字符串
注:内置参数不能用于断言中,所以一般用的会比较少,都会自定义参数
2.自定义动态参数(常用)
自定义参数的代码也是基于js代码进行编写的,这里就不多做说明,简单举例一下自定义时间戳的使用方法,如下代码所示:
//自定义的时间戳
var times = Date.now();
pm.globals.set("times",times);
//让接口请求停留3秒,相当于time.sleep(3)
const sleep = (milliseconds) => {
const start = Date.now();
while (Date.now() <= start + milliseconds) {}
};
sleep(3000);
三、Postman的全局变量和环境变量
全局变量:就是在所有接口请求里面都可以访问的变量
环境变量:其实也是全局变量,一般是ip值,用于切换开发环境、测试环境、线上环境,方便接口在不同环境的使用(注意:环境变量是相同的变量名,不同的变量值来实现环境的切换)
四、Postman的断言
postman里提供许多的断言方式,下面六种是最常用的断言:
//断言返回码为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//断言返回结果中包含指定的字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
//断言并检查返回的JSON数据
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
//断言返回的值等于一个字符串
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//断言响应头包含Content‐type
pm.test("Content‐Type is present", function () {
pm.response.to.have.header("Content‐Type");
});
//断言响应时间少于200MS
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
特别注意:
1.postman内置的动态参数无法做断言。所以必须使用自定义的动态参数。
2.在tests里面不能使用{{}}的方法取全局变量,必须使用以下三种方式之一来获取:
//比如自定义时间戳time
var times = Date.now();
pm.globals.set("times",times);
//获取time的值有如下方式
pm.globals.get("times")
globals['times']
globals.times
四、使用Newman输出报告
使用postman是不能生成测试结果报告的,因此都会结合Newman去运行接口和生成测试报告,具体步骤如下(前3步为安装步骤,已安装时可以跳过):
1.安装Node.js
下载:nodejs.org/en/ 双击安装
验证:打开cmd,输入node出现> 说明安装成功
2.安装npm
安装Node一般都会有自动安装npm的,若没有安装时需要手动去安装
打开cmd输入:npm install --global --production windows-build-tools
等待安装完成即可
3.安装Newm****an
打开cmd输入:npm install -g newman
验证:打开cmd输入newman -v 出现版本信息说明成功
4.导出postman测试用例、环境变量、全局变量
4.1导出全局变量
4.2导出全局变量
4.3导出环境变量
5.使用newman运行用例生成报告
打开cmd,输入命令进行运行
newman run "e:\\yongli.json" -e "e:\\huanjing.json" -g "e:\\quanju.json" -r
cli,html,json,junit --reporter-html-export "e:\\report.html"
// -e 环境变量
// -g 全局变量
// -r cli,html,json,junit --reporter-html-export 固定写法
运行后在对应路径上生成report.html,打开即可查看报告
【后记】
今天的文章就写到这啦,后续将继续分享Postman实现接口的鉴权、接口签名等内容!!!欢迎各位加好友进行讨论哦,v:xiaoli_test
求关注!!!求关注!!!求关注!!!