1、接口测试用例文档:测试接口、用例标题、请求方式、预置条件、操作步骤、输入数据、预期结果(状态、业务)、优先级、用例说明、测试结果、结果说明
2、接口测试工具、postman介绍
接口测试工具:postman、jmeter、soapui(测试webservice协议)、apipost、fiddler、charles
3、postman:是一款功能强大的网页调试与发送HTTP请求的谷歌插件,专为接口而生
newman专为postman而生
postman界面:
菜单栏
工具栏:
新建请求、收藏夹、环境、API文档、模拟接口服务、监视器、接口,导入接口,运行所有的接口
工作区域、团队协作,登录
请求历史、项目收藏夹(包)、APIs新出来的接口
接口请求区:点击“+”号,生成一个请求,环境
请求方式、请求地址、发送请求、保存请求
请求参数、鉴权、请求头、发送post请求时的选项
没有参数、键值对、键值对、json格式数据、二进制文件
下面是响应
4、今天学习postman的使用,新建一个收藏夹,然后在下面建一个文件夹,这个文件夹是用于对用例进行分类的,然后新建一个get请求,get是以?方式进行传参,多个请求间用&进行分割,参数会自动填写到params。
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
appid:wx6b11b3efd1cdc290 密钥:106a9c6157c4db5f6029918738f9529d
发送
把请求加到收藏夹
5、使用get请求获得access_token接口
6.创建标签
https://api.weixin.qq.com/cgi-bin/tags/create?access_token=43_SbG3j89IzNFB-jzrCsn7mivWGIZ6KYU6K1Zv7etKawoGkjLYrSQFX32KqCnGwy2apD7E1ld6a5ImTgHeXAwByZ3_BMUo-ZguARrvVg93S6bBT4iGZaQhKNpPRjgrdzeMGf3Qwrdr7hw83Y8IKHNhAIAPMS
7.获取公众号已创建的标签
8.编辑标签
9.删除标签
10、.postman内置的动态参数
企业当中做接口的时候会出现接口不能把参数写死
时间戳{{$timestamp}}
生成0-1000随机的整数{{$randomint}}
生成一个GUID的字符串{{$guid}}很长的一个字符串
11.postman环境变量和全局变量
开发、测试、线上、预发布环境
环境、globals是全局变量,不是局部变量
12.接口关联
JSON提取器
//1.加上.access_token获取token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.access_token)
//2.把提取到的值保存到全局变量
pm.globals.set("access_token", jsValue.access_token);
设置环境
断言
console.log(responseBody);
//打印返回的字符串
设置变量{{ip}}
var jsValue = JSON.parse(responseBody)
console.log(jsValue)
//把返回的字符串转换为json格式并打印,发现结果是键值对的形式
//1.加上.access_token获取token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.access_token)
//2.把提取到的值保存到全局变量 set a global variable设置一个全局变量
//pm.globals.set("variable_key", "variable_value");
运行后就多了一个全局变量
之后需要使用到token的接口全部都可以直接取全局变量
需要优化id,实现闭环关联
//使用正则表达式,match表示匹配,.+?表示匹配的是前面和后面中间的这个值
var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]
console.log(flag_id)
正则表达式提取器
//1.使用正则表达式,match表示匹配,.+?表示匹配的是前面和后面中间的这个值
var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]
console.log(flag_id)
//2.得到id后,把它设置到全局变量里面
pm.globals.set("flag_id", flag_id);
Cookie提取器
9.环境、全局相关
1)获取一个环境变量的值
2)获得一个全局变量的值
3)获取一个变量
4)设置一个环境变量
5)设置一个全局变量
6)清空一个环境变量
7)清空一个全局变量
8)发送一个请求
//八种断言方式,八大元素定位
//1.断言返回码为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//2.断言返回的结果中包含有一个指定的字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("tags");
});
//3.对返回的结果做json字段检查
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.tags[0].id).to.eql(2);
});
//4.断言返回的结果等于一个字符串
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//5.断言响应头中包含有指定的响应头-检查响应头
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
//6.断言接口请求时间少于200毫秒
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(230);
});
//7.断言一个post请求返回的状态码是否在指定范围
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 202]);
});
//8.断言返回的状态码信息里包含指定的字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK");
});
13、//1.断言返回码为200 状态断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//2.断言返回的结果中包含有一个指定的字符串 业务断言
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("tags");
});
//3.对返回的结果做json字段检查 业务断言
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.tags[0].id).to.eql(2);
});
//4.断言返回的结果等于一个字符串 业务断言
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
//5.断言响应头中包含有指定的响应头-检查响应头
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
//6.断言接口请求时间少于200毫秒 性能断言
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(230);
});
//7.断言一个post请求返回的状态码是否在指定范围
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 202]);
});
//8.断言返回的状态码信息里包含指定的字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK");
});
//1.加上.access_token获取token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.access_token)
//2.把提取到的值保存到全局变量
pm.globals.set("access_token", jsValue.access_token);
//----------------
//状态断言
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("access_token");
});
//1.使用正则表达式,match表示匹配,.+?表示匹配的是前面和后面中间的这个值
var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]
console.log(flag_id)
//2.得到id后,把它设置到全局变量里面
pm.globals.set("flag_id", flag_id);
//----------------
//状态断言
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("id");
});
//----------------
//状态断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//业务断言
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.errcode).to.eql(0);
});
//----------------
//状态断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//业务断言
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.errcode).to.eql(0);
});
//获取当前时间戳
var times =Date.now()
console.log(times)
pm.globals.set("times", times);
//使用自己生成的时间戳变量
{
"tag": {
"name": "关东人VIP{{times}}"
}
}
精确断言-前置脚本中定义一个全局变量
//获取当前时间戳
var times =Date.now()
console.log(times)
pm.globals.set("times", times);
参考:
https://www.bilibili.com/video/BV17p4y1B77x?from=search&seid=16095959831877891857