接口测试系列(三):Postman工具的使用1

166 阅读2分钟

上次讲到了接口测试的流程和Postman工具的简单介绍。这次我们来继续了解Postman的接口关联、动态参数、断言等相关的使用。让我们现在开始吧!!!

一、Postman的接口关联

在面试的过程中,面试官经常会问:你们是怎样实现接口的关联?下一个接口的参数是怎样使用上一个接口的返回值?如果使用的Postman工具的话,一般是在Tests里写代码来提取上一接口的值保存到全局变量中,有以下几种方法:

1.通过JSON提取器来实现

image.png

//使用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 );

提取到的全局变量通过{{变量名}}来使用该变量的值,如下图所示:

image.png

二、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的全局变量和环境变量

全局变量:就是在所有接口请求里面都可以访问的变量

image.png

环境变量:其实也是全局变量,一般是ip值,用于切换开发环境、测试环境、线上环境,方便接口在不同环境的使用(注意:环境变量是相同的变量名,不同的变量值来实现环境的切换)

image.png

image.png

四、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导出全局变量

image.png

image.png

4.2导出全局变量

image.png

4.3导出环境变量

image.png

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,打开即可查看报告

image.png

【后记】

今天的文章就写到这啦,后续将继续分享Postman实现接口的鉴权、接口签名等内容!!!欢迎各位加好友进行讨论哦,v:xiaoli_test

求关注!!!求关注!!!求关注!!!