DAY2课题:Postman接口关联&动态参数&断言&CSV数据驱动
目录
一、接口关联,接口依赖,多接口串联,组合API
二、Postman的动态参数(随机数)
三、Postman的环境变量和全局变量
四、Postman断言
五、其他接口类型
一、接口关联,接口依赖,多接口串联,组合API
第一个接口的返回值作为第二个接口的参数。
javascript通用语法:
1.所有的符号都必须是英文状态下的符号
2.每一句代码后都必须有;结束。有if或for除外。
3.变量通过var定义。
第一种接口关联方式:json提取器的方式实现接口关联,只能针对Josn数据
//打印
console.log(responseBody);
//把返回的json字符串转换成对象。
var jsonObj = JSON.parse(responseBody);
//从对象中取出access_token的值并设置全局变量
pm.globals.set("access_token",jsonObj.access_token);
第二种接口关联方式:正则表达式提取器的方式实现接口关联,所有数据都可以。
//通过返回的结果匹配一个正则表达式去得到需要的值
var datas = responseBody.match(new RegExp('"access_token":"(.*?)"'));
//从变量中取出access_token的值并设置全局变量
pm.globals.set("access_token",datas[1]);
其他的方法:
1.获取响应头的值
var content_type = postman.getResponseHeader("Content‐Type");
console.log(content_type);
2.获取响应的Cookie的值
var csrf_token = postman.getResponseCookie("csrf_token");
console.log(csrf_token.value);
3.如果返回的是xml的值,那么可以转化成对象
var jsonObject = xml2Json(responseBody);
二、Postman的动态参数(随机数)
1.内置的动态参数:有局限。局限在于无法断言。
{{$timestamp}} 生成当前时间的时间戳
{{$randomInt}} 生成0-1000的随机数
{{$guid}} 生成一个很长的GUID的随机字符串
2.自定义的动态参数或函数。
自定义时间戳参数
//自定义动态参数时间戳
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(randomMobile(100000000,999999999));
随机手机号
//随机数
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) +min;
//随机手机号
var randomMobile = `18${randomInt(100000000,999999999)}`;
//打印
console.log(randomMobile);
等待N秒实现:有些接口有调用时间限制,5秒之内只能调用1次。
const sleep = (milliseconds) => {const start = Date.now();while (Date.now() <= start + milliseconds) {}};//等待5秒sleep(5000)console.log("---------结束----------");
三、Postman的环境变量和全局变量
全局变量:在所有环境所有接口都可以访问的变量。
环境变量:在当前环境所有接口都可以访问的变量。
四、Postman断言
断言是判断预期结果和实际结果是否一致。
1.状态断言:断言返回码为200,一般只有一个。
2.业务断言:判断最核心的业务关键字。可以有多个。
断言状态码为200(必用)
断言返回的结果中包含有一个字符串。(常用)
断言检查返回的json对象中的字段值。(一般用于当返回是json对象时)
断言返回的body等于一个字符串。(一般用于当返回的结果很少时)
检查是否包含有Content-type的响应头
检查请求耗时少于200ms
检查post请求的响应码是否是一个值
检查返回的信息是否是一个字符串
//状态断言:检查返回的状态码为200
pm.test("检查返回的状态码为200", function () {pm.response.to.have.status(200);});
//业务断言:检查返回的结果中包含有access_token字符串
pm.test("检查返回的结果中包含有access_token字符串", function () {pm.expect(pm.response.text()).to.include("access_token");
});
//检查返回的结果中的json里面的expires_in的值为7200
pm.test("检查expires_in的值为7200", function () {var jsonData = pm.response.json();pm.expect(jsonData.expires_in).to.eql(7200);
});
//检查返回的body等于一个字符串
// 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);
});
//断言状态码在一个区间
pm.test("Successful POST request", function () {pm.expect(pm.response.code).to.be.oneOf([200, 202]);
});
//断言返回信息
pm.test("Status code name has string", function () {pm.response.to.have.status("OK");
});
在断言中不能通过{{}}获取全局变量:可以通过以下方式获取:
pm.globals.get("times")
全局断言:
五、其他接口类型
1.文件上传接口。
2.必须带请求头的接口。
1.抓包工具中复制请求头
2.Bulk Edit编辑请求头
3.Key-Value Edit转化成