Postman(二)接口关联依赖-动态参数-断言
一、接口关联,接口依赖,多接口串联,组合API
第一个接口的返回值作为第二个接口的参数
精通javascript脚本 常用的固定的记住。不常用不需要记,只需要把笔记保存好
面试必问!!!除机试外,你只需要口头表达即可
javascript通用语法:
-
所有的符号都必须是英文状态下的符号
-
并且每一句后面必须以分号;结束
-
变量通过var定义
第一种接口关联方式:json提取器的方式实现接口关联(在第一个接口把返回值转换成对象,并把值取出来,设置成一个全局变量,在第二个接口,引用全局变量)
只能针对json数据
//打印
//console.log("打印");
console.log(responseBody);
//把返回的json字符串转换成对象。
var jsonObj=JSON.parse(responseBody);
//从对象中取出access_token值并设置成全局变量
pm.globals.set("access_token",jsonObj.access_token);
在第二个接口; {{access_token}}
第二种接口关联方式:正则表达式提取器方式实现接口关联 ,所有数据都可以。
-
在第一个接口:
//通过返回的结果匹配一个正则表达式去得到需要的值
var datas = responseBody.match(new RegExp
('"access_token":"(.*?)"'));
//打印
pm.globals.set("access_token",datas[1]);
在第二个接口; {{access_token}}
其他方法:
-
获取响应头的值
-
//-----------------------------------------------------
-
var content_type = postman.getResponseHeader("Content-Type");
-
console.log(content_type);
-
获取响应Cookie值
-
var csrf_token = postman.getResponseCookie("csrf_token");
-
console.log(csrf_token.value);
-
如果我们返回的是xml的值,那么可以转化成对象
-
var jsonObject = xml2Json(responseBody);
二、postman的动态参数(随机数)
-
内置的动态参数 有局限,局限在于无法断言
-
{{$timestamp}} 生成当前时间的时间戳
-
{{$randomint}} 生成0-1000的随机数
-
{{$guid}} 生成一个很长的GUID的随机字符串
-
自定义的动态参数
-
//自定义动态参数时间戳
-
var times = Date.now();
-
console.log(times);
-
//设置为全局变量
-
pm.globals.set("times", times);
-
随机整数
// const randomInt =(min, max)=> Math.floor(Math.random()*(max - min +1)+min;
// console.log(randomInt(100000000,999999999));
-
随机手机号
-
//随机数
const randomInt =(min, max)=> Math.floor(Math.random()*(max - min +1)+min;
var randomMobile = '18${randomInt(100000000,9999999)}';
console.log(randomMobile);
-
等待N秒实现 有些接口有调用限制,比如3秒调用一次
const sleep = (milliseconds) => {
const start = Date.now();
while (Date.now()<= start + milliseconds){}
};
//等待3秒
sleep(5000)
console.log("--------结束----------")
三、 Postman的全局变量和环境变量
全局变量:在任何接口里面都可以访问的变量。
环境变量:在当前环境下每个接口都可以访问的量。

四、 Postman断言
断言是判断预期结果和实际结果是否一致。
-
状态断言:断言返回码为200,一般只有一个。
-
业务断言:判断最核心的业务关键字,可以有多个。
Status code:Code is 200
* 判断状态码为200(必用)
//------------------------------
//状态断言:检查返回的状态码为200
pm.test("检查返回的状态码为200", function () {
pm.response.to.have.status(200);
});
Response body :Contains string
-
断言返回的记过包含一个字符串(常用于比较长的且唯一的值)
//业务断言:检查返回结果中包含有access_token字符串
pm.test("检查返回结果中包含有access_token字符串", function () {
pm.expect(pm.response.text()).to.include("access_token");
});
Response body:JSON value check
* 断言检查返回的json对象中的字段。(一般用于返回json对象)
//检查返回的结果中的json里面的expires_in的值为7200
pm.test("检查返回的结果中的json里面的expires_in的值为7200", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.expires_in).to.eql(7200);
});
Response body:is equal to a string
* 断言返回的body等于一个字符串。(一般用于返回的结果很少时)
//检查返回的body等于一个字符串
//pm.test("Body is correct", function () {
// pm.response.to.have.body('{"errcode":0,"errmsg":"ok"}');
//});
Response headers:Content-Type header check
* 检查是否包含有Content-Type的响应头
//检查断言响应头中有Content-Type
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
Response time is less than 200ms
* 检查是否请求耗时少于200ms
//断言时间少于200ms
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
Status code:Successful POST reques
* 检查post请求的响应码是否是一个值
//断言状态码在一个区间
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 202]);
});
Status code:Code name has string
* 检查返回的信息是否是一个字符串
//断言返回信息
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
});
在断言中不能通过{{}}方式获取全局变量
可以通过以下方式 获取全局变量再进行拼接
-
pm.globals.get("times");
全局断言:一般只断言状态码
//------------------------------
//状态断言:检查返回的状态码为200
pm.test("检查返回的状态码为200", function () {
pm.response.to.have.status(200);
});

浙公网安备 33010602011771号