在手工测试过程中,编写测试用例,每个用例中都会添加有 期望结果,当测试人员实际运行的时候,会拿实际执行的结果跟用例中定义的预期结果做对比。
如果实际运行结果跟预期结果一致,测试通过。
如果实际运行结果跟预期结果不一致,测试失败。
断言的意思就是 拿实际结果跟预期结果做对比,往往用在自动化测试过程中。
Http 状态码
做接口测试的过程中,每个请求之后,有http返回状态码。
- 200 服务器响应成功
- 404 请求地址出错
- 500 服务器端出错
说出常见10个http状态码。
添加断言
以添加购物车接口为例。
添加成功之后,主要有两个检查点
- code对应值为0
- message对应值为 操作成功
根据上面分析的检查点进行断言编写。
- 切换到【Tests】中。
添加如下代码
pm.test("code的值为0", function () {
// 将服务器返回的结果转换为json格式数据,json数据赋变量 jsonData
var jsonData = pm.response.json();
// 添加断言 jsonData中的 code字段值为 0
pm.expect(jsonData.code).to.eql(0);
});
pm.test("message的值为操作成功", function () {
// 将服务器返回的结果转换为json格式数据,json数据赋变量 jsonData
var jsonData = pm.response.json();
// 添加断言 jsonData中的 code字段值为 0
pm.expect(jsonData.message).to.eql("操作成功");
});
运行接口
复杂类型数据断言
以查询会议室接口为例。每次成功添加一个会议室,在查询接口中会新增1个。
另外,当查询条件为
{
"city": "北京",
"building": "天安门大厦",
"floor": "18F"
}
接口返回的结果中
{
"errcode": 0,
"errmsg": "ok",
"meetingroom_list": [
{
"meetingroom_id": 3090,
"name": "11会议室",
"capacity": 10,
"city": "北京",
"building": "天安门大厦",
"floor": "18F",
"equipment": [
1,
2,
3
],
"coordinate": {
"longitude": "113.934528",
"latitude": "22.540503"
},
"need_approval": 0
},
{
"meetingroom_id": 3095,
"name": "863会议室",
"capacity": 10,
"city": "北京",
"building": "天安门大厦",
"floor": "18F",
"equipment": [
1,
2,
3
],
"coordinate": {
"longitude": "113.934528",
"latitude": "22.540503"
},
"need_approval": 0
}
]
}
检查点:
- 返回结果中每个会议室的 city 为 北京
- 每个会议室的 building 为 天安门大厦
- 每个会议室的楼层为 18F
需要使用到for循环 对应的语句
pm.test("会议室中的city值为北京", function () {
var jsonData = pm.response.json();
// jsonData.meetingroom_list 为数组结构,存放多个会议室信息
// 使用for循环语法 取到会议室数组中每一个会议室信息,取到每个会议室信息保存到变量meetingroom
for(let meetingroom of jsonData.meetingroom_list){
// meetingroom中的city值为 "beijing"
pm.expect(meetingroom.city).to.eql("北京");
}
});
pm.test("会议室中的building值为天安门大厦", function () {
var jsonData = pm.response.json();
// jsonData.meetingroom_list 为数组结构,存放多个会议室信息
// 使用for循环语法 取到会议室数组中每一个会议室信息,取到每个会议室信息保存到变量meetingroom
for(let meetingroom of jsonData.meetingroom_list){
// meetingroom中的city值为 "beijing"
pm.expect(meetingroom.building).to.eql("天安门大厦");
}
});
pm.test("会议室中的floor值为18F", function () {
var jsonData = pm.response.json();
// jsonData.meetingroom_list 为数组结构,存放多个会议室信息
// 使用for循环语法 取到会议室数组中每一个会议室信息,取到每个会议室信息保存到变量meetingroom
for(let meetingroom of jsonData.meetingroom_list){
// meetingroom中的city值为 "beijing"
pm.expect(meetingroom.floor).to.eql("18F");
}
});
执行结果
作业
社区系统 API文档:
http://47.100.175.62:3000/api
- accesstoken String 用户的 accessToken
- title String 标题 (标题的字数不能小于10个)
- tab String 目前有(只能使用这四个值中其中一个 ask share job dev)
- content String 主体内容(主体内容不能为空)
accesstoken 值: 619a59ab-c015-4a8b-bd13-8e6bcc8df50a
作业练习答案
Cnode 社区.postman_collection.json
zoye.csv
- 做正常场景测试
- 异常场景测试 — 要求使用csv数据文件。
- 给正常场景添加1一个断言
- 检查点: sucess的值为true
- Http,Https 的区别
- 10 个Http状态码