这是之前搞的接口自动化方案,已经在业务测试中实现了使用postman编写接口脚本,通过GitHub+Jenkins+email +html report实现了接口自动化,现在分块整理一下。
postman脚本编写
1、创建集合 和 目录:
一条业务线下的接口可以放到一个集合里,例如,xxxOneAPI;按照接口的业务分类,创建文件夹,例如,user、dev、event、home、settings等;一个接口的不同场景或者用例可以创建子文件夹,这样就形成了postman接口用例的层级目录:
2、请求URL:
指定请求方式后就可以编辑请求的url了,url的格式一般为:
https://{ {host}}/v1/user/register?uuid={ {$guid}}&t={ {$timestamp}}
(1)因为在测试过程中会有不同的环境,例如,测试环境、准生产环境、生产环境等,或者不同的大区,例如,中国区、北美区、欧洲区等,这样把域名作为一个变量,例如,host,使用双{}来引用;
(2)query部分包含uuid和时间戳,uuid是一个请求的唯一标识,以及该接口在处理过程中请求其他相关的接口都会是相同的uuid,查日志时会用到它,时间戳是发生请求的时间。postman提供了生成uuid和时间戳的方法,引用方式为:{ {$guid}}和{ {$timestamp}}
(3)跟URL设置相关的是Params,例如:
3、编辑Headers:
根据接口文档添加指定的header,例如:
如果,多个接口使用的header是相同的,可以使用Presets->Manage Presets添加公共header
这样在编辑后面的接口脚本时就可以直接选择已经编辑好的公共接口了。
注意:header中一定要指定Content-Type,例如,application/x-www-form-urlencoded
4、编辑Body:
(1)指定传输格式,例如,x-www-form-urlencoded
(2)设置环境变量,并通过{ {}}引用
5、编写Test:
(1)添加断言,断言有不用的方式,例如:
//断言状态code是200
pm.test("status code 是200",function(){
pm.response.to.have.status(200);
});
//断言整个返回的json串,适用于当返回的json内容较少时
pm.test("Json串返回502 用户已存在", function () {
pm.response.to.have.body({"errno":502,"errmsg":"用户已存在","data":{"countryAbbr":"CN","countryCode":"86"}});
});
//断言json串中的Email是登录的Email
pm.test("json串中返回的Email是登录的Email", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data.email).to.eql(pm.environment.get("username"));
});
//断言返回的Json串中包含字段:email、sid_、xxxxUid_、 xxxxUsername_、uid_字段
pm.test("Json串中返回的字段包含:email、sid_、xxxxUid_、 xxxxUsername_、uid_", function () {
pm.expect(pm.response.text()).to.include("email");
pm.expect(pm.response.text()).to.include("sid_");
pm.expect(pm.response.text()).to.include("tuyaUid_");
pm.expect(pm.response.text()).to.include("tuyaUsername_");
pm.expect(pm.response.text()).to.include("uid_");
});
pm.test("上传成功,已生成url!", function () {
pm.expect(pm.response.text()).to.include("url", "https://d4fp4ynbqtcz4d.cloudfront.net/xxxxx/feedback");
});
(2)添加postman控制台的日志:
console.log("注册的email字段是:" +pm.environment.get("unregisteredEmail"));
(3)提取返回值:
//提取uid_、sid_、xxxxUid_、xxxxUsername_
pm.environment.set("uid_", jsonData.data.uid_);
pm.