精通POSTMAN接口测试之接口关联和依赖、动态参数

接口关联三最常用种方式:

(1)使JSON提取器提取返回的responseBody值(从返回值提取)

 

//使JSON提取器把responseBody返回值转换为一个json对象;
var jsonData=JSON.parse(responseBody);
//关联数据库表file_manager,查询获得的raw_name文件名称,输出为环境变量或者为全局变量
pm.globals.set("file_name", jsonData[0].raw_name);
 
(2)正则表达式提取(从返回值提取
var sname=responseBody.match(new RegExp('"raw_name": "(.*?)"'));
pm.globals.set("file_name",sname);
 
(3)从Cookie中提取(从cookie返回值提取)
 
//从响应头里面提取变量
var types=postman.getResponseHeader("Content-Type");
console.log(types);
//从Cookie里面提取变量
var csrf_token=postman.getResponseCookie('csrf_token');
console.log(csrf_token);

 

示例:

1.上传文件,返回文件id,设置id为全局变量

将"data":2613,输出为全局变量(如下图,红色圈出部分),并对文件上传成功后的状态:200和message:成功,做结果断言

2. 连接musql数据库,先安装好node.js和xmysql,启动node.js, 再链接数据库 xmysql -h hostname  -u username -p password -d databasename

(出现以下标志表示链接数据库成功)
          Generating REST APIs at the speed of your thought..

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

          Database              :    dgws
          Number of Tables      :    22

          REST APIs Generated   :    423

          Xmysql took           :    1.9 seconds
          API's base URL        :    localhost:3000

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GET /api/file_manager?_where=(id,eq,2599) 200 845 - 33.011 ms
GET /api/file_manager?_where=(id,eq,2615) 200 886 - 20741.569 ms

3.http://localhost:3000/api/file_manager?_where=(id,eq,{{id}})  这是获取数据库的数据链接请求  输入引用全局变量{{id}},

链接数据库,关联文件id,查询获取文件名称,利用JSON提取器把responseBody返回值转换为JSON对象,再获取JSON对象的字段rawname输出为全局变量

4.利用上个步骤输出的全局变量file_name,引用到文件查询接口{{file_name}}, 就能完成接口关联查询,上一个接口的结果用于下一个接口的条件;

并对该文件查询接口做接口结果断言:

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("手机号码;地址");
});
pm.test("验证查询文件返回成功"function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data.rows[0].rawName).to.eql("1M_sensitive.csv");
});
 
接口内置的动态参数:
接口测试中常出现接口传参数不能写成固定值,每次传参值需动态变化,可借助以下方式:
(1)内置动态参数
引用动态参数方式为:{{$变量名}}
引用全局、环境变量方式为:{{变量名}}
内置动态参数常用如下:
{{$timestamp}}  时间戳
{{$randomint}}  随机的0-1000的整数
{{$guid}}            随机的很长的字符串
 
{"fileId":"254","shareType":"fs","fileName":"test{{$timestamp}}.csv"}
如上在传参的JSON中可加入内置变量
 
(1)自定义变量(自定义变量可用于后续做结果断言,比内置变量函数方式更优) //自定义时间戳
var times=Date. now();
pm.globals.set("times",times);
//让接口请求停留3秒
const sleep=(milliseconds)=>{
  const start=Date.now();
  while(Date.now()<=start+milliseconds){}
};
sleep(3000);
 
 

 

posted @ 2021-09-30 18:07  xiaowangzi3668  阅读(472)  评论(0)    收藏  举报