Postman高级应用

提取接口返回值

1、获取响应的header值

var Content-Type = postman.getResponseHeader("Content-Type");

2、获取响应的cookie值

var xsrfCookie = postman.getResponseCookie("csrf_token");

3、获取响应的正文

var response = responseBody;

4、使用正则表达式截取响应部分内容,通过要截取的字符串左右边界截取

var str = (responseBody.match(new RegExp('"expires_in":(.+?)}')))[1];

5、返回的是json数据,可以通过转换成json对象然后解析

var responseDate =JSON.parse(responseBody); responseDate.expires_in

6、转化XML格式的响应成JSON对象---Convert XML body to a JSON object

var jsonObject = xml2Json(responseBody);

接口关联(串行传参)

微信公众平台开发者文档中,创建用户分组接口需要获取access token接口返回的access_token值才能进行创建分组,之前我们使用的方式是先执行获取access token接口,得到值后,然后复制到创建用户分组接口。
上述做法不能完成接口自动化操作,只能手工逐个去执行,我们可以利用postman的相关功能组合完成获取access token接口的返回值送给创建用户分组接口,该过程称为接口关联。

操作如下:
1、利用postman获取上一个接口指定的返回值
2、使用postman全局变量保存上一个接口的值,代码如下:

postman.setGlobalVariable("access_token", str);  

//其中前面的参数为全局变量名称, 后面为js变量

3、和之前引用全局变量一样,使用{{access_token}}即可。

备注:由于有关联关系,所以两个接口要顺序执行才能互相之间传递数据。

设置动态参数

在runner里循环发n次请求/做自动化测试时,有些接口不适合写死参数:
1.Postman有以下内建变量,适合一次性使用:

{{$guid}}//生成GUID 

{{\(timestamp}}//当前时间戳 {{\)randomInt}}//0-1000的随机整数

设置顺序值代码:

var j = parseInt(globals.i);

j = j + 1;
postman.setGlobalVariable("i",j);

2.参数依赖上一个请求的返回:
上个请求的Tests里提取参数存环境变量,这个请求里用{{变量名}}取值
3.参数每次都不同,但之后的断言或别的请求里可能还要用:
在Pre-request Script里写代码处理,存为环境变量,参数里用{{变量名}}取值

Pre-request Script为执行接口请求之前要做的操作,而tests是执行完请求要做的操作。内建变量一般放在Request里,我们也可以用代码在Pre-request Script 中实现,用代码实现的好处是可以复用。
举例如下:
时间戳实现:

var times = Date.now();

postman.setGlobalVariable("timess", times);

guid实现:

const guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' 

.replace(/x/g, () => (Math.floor(Math.random() * 16)).toString(16))
.replace(/y/g, () => (Math.floor(Math.random() * 4 + 8)).toString(16));

随机整数实现:

const randomInt = (min, max) => Math.floor(Math.random() * (max -min + 1)) + min; 

postman.setGlobalVariable("nums",randomInt(0,1000));

从多个选项中选择实现:

const getRandomValue = list => list[randomInt(0, list.length -1)]; 

const charsInName = ['王','李','张'];
postman.setGlobalVariable("options",getRandomValue(charsInName));

顺序取值实现:

var s = postman.getGlobalVariable("num");

s = parseInt(s) + 1;
postman.setGlobalVariable("num",s);

随机手机号实现:

environment.randomMobile = `18${randomInt(100000000, 999999999)}`;

同步等待实现:

const sleep = (milliseconds) => {

const start = Date.now();
while (Date.now() <= start + milliseconds) {}
};

流程控制

流程控制只有在collection runner或Newman里才生效
假设2个接口的顺序为:接口A-->接口B
接口A:https://www.baidu.com/s?wd=海贼王
接口B:https://www.baidu.com/s?wd=海贼王路飞
如果希望执行顺序为:接口A -> 接口B -> 接口A,又不想复制一份接口A,那么在接口A的Teses中编写脚本:

if(globals["wd"] == "海贼王路飞——百度搜索")

{
postman.setNextRequest("null");
postman.setGlobalVariable("wd","first");
}
tests["A接口执行"]=true;

wd为接口B中的返回值,在接口B中将其定义成一个全局变量。接口A通过判断全局变量是否正确进而判断接口B是否执行。如全局变量判断正确,将终止执行,否则执行接口B。

接口B的Teses中编写脚本:

var str = (responseBody.match(new RegExp('<title>(.+?)</title>')))[1];

tests["B接口执行"] = true;
postman.setGlobalVariable("wd",str);
postman.setNextRequest("A接口");

“A接口”为A接口的名称。如果需要实现多个接口的一次循环,只需在每个接口的 Tests中编写脚本“postman.setNextRequest('下一个接口名');”

调试

1.使用 Ctrl+Alt+c 可以打开Postman的控制台,可以查看请求和响应(只适用于客户端,不适用于Chrom 插件)

2.用console.log()打印,到控制台看

3.tests['这里拼出你想看的字符串'] = true在界面/报告看断言

定义公共函数

常用公共函数:
1、判断是否超时(assertNotTimeout)

var hasResponse=postman.getResponseHeader('Content-Type')?true:false; 

if(!hasResponse) tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;

2、未超时,显示发出的请求参数(logParams)

if(hasResponse) tests[`[INFO] 请求参数(超时没返回时不解析): ${JSON.stringify(request.data)}`]=true;

3、未超时,解析返回的JSON对象(getResponseJson)

try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){ tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false; tests[`[INFO] 返回:${responseBody}`]=true; console.error(err);}

4、返回元素的类型(assertType)

var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name}为${type}(实际值: ${value})`]=isType;};

5、返回元素是否与预期值一致(assertEqual)

var assertEqual=(name,actual,expected)=>{tests[`${name}等于${expected}(实际 值:${actual})`]=actual===expected;};

6、返回元素是否与预期值不一致(assertNotEqual)

var assertNotEqual=(name,actual,expected)=>{tests[`${name}不等于${expected}(实际值:${actual})`]=actual!==expected;};

将以上公共函数以每行一对key:value 的形式编辑设置成全局变量,如下图所示:

全局变量设置完成后就可以引用这些公共函数了
页面访问请求:

https://api.weixin.qq.com/cgibin/groups/create?access_token=ACCESS_TOKEN

该接口请求方式:POST 在Body中填写json数据:

{"group":{"name":"test"}}

在Tests中编写脚本,如下图所示:

需要执行的测试用例可写在Tests的if语句中:

assertType=(name,value,type);
name为用例的名称,value为该元素的值,type为该元素的类型,如:

assertType('name类型判断',json.name,string);//用例执行成功

assertEqual=(name,actual,expected);
name为用例的名称,actual为返回的实际值,expected为预期值,如:

assertEqual('是否name正确',json.name,'newdreama');//用例执行成功

assertNotEqual=(name,actual,expected);
name为用例的名称,actual为返回的实际值,expected为预期值

assertNotEqual('是否name正确',json.id,107);//用例执行成功

外部数据文件

你可以在Collection Runner中使用数据变量去运行不同的数据,Collection Runner在HTTP requests 和script中可以导入CSV文件或是JSON文件,从数据文件(即CSV或JSON文件)中使用values,为了在Postman UI中去使用它们,你需要 遵循和environment or global variables一样的语法。

1.在你的Collection request中使用变量,以下的所有变量将会被数据文件中的相应的值替换

2.准备你所需要运行的数据文件(JSON/CSV)
CSV文件要在Collection Runner中工作,第一行必须是在request中要使用的变量 名,每一行是一条用例,并表示一次迭代。
JSON文件,你需要确保你的文件有键/值对数组。数组中的每个元素是键值对 的对象,代表了一次迭代。key是作为变量名,values是代替request里的值。
3.打开Collection Runner窗口以及选择合适的Collection或文件夹
4.选择“Choose files”,从文件选择区加载数据文件,如果加载成功,你可以预览 Collection Runner中执行的数据量,通过选择Data File Type选择文件类型,然后 点击Preview来预览数据。
5.设置迭代次数。每次迭代都将使用你的数据文件中的一行,如果迭代次数超过 数据文件中的行数,将重复执行最后一行
6.运行Collection以及观察结果

备注:
导入的外部数据文件,通过两种方式传递到postman参数中, 在HTTP requests中可以使用{{ keyword }}去引用
在script中可以使用data. keyword 或者data[”keyword “] 去引用
如果一定要在test里取请求参数里填的东西,比如传JSON字符串就用 JSON.parse(request.data).phone
如果是form就用request.data.phone

Newman简介

  • Newman是为Postman而生,专门用来运行Postman编写好的脚本
  • 使用Newman,你可以很方便的用命令行来执行postman collections
  • Newman巩固了Postman接口测试神器的地位

Newman的安装

1.先下载Node.js
https://nodejs.org/en/
2.安装NodeJs(很容易安装,这里不多做介绍)
3.打开cmd,输入node,如果没有报错,而是显示“>”,说明node安装成功。
4.安装npm (如果nodejs自带,可以省略)
打开cmd,输入npm install --global --production windows-build-tools
安装这些依赖需要一些时间,耐心等待安装完成。
5.然后安装NewMan
打开cmd,输入npm install -g newman
6.通过查看newman版本测试安装是否成功,打开cmd,输入newman -v,出 现版本信息即安装成功

Newman的使用

1.执行collection
格式:newman run {json filesource}//绝对路径比较准确 //(Windows系统后面不需要分号,linux系统需要)
例如:newman run C:\Users\xingzheng\Desktop\dafmng-api.json
2.直接发送一个request

3.设置跑测试的轮数

4.设置数据文件

5.保存output到文件

posted @ 2020-04-05 17:18  心脏鼓点  阅读(1001)  评论(0编辑  收藏  举报