前言:
用的ruo-yi框架测试。 自己上前端F12查看想要测试接口的请求参数,这里不提供,只提供步骤。
创建集合管理测试接口
接口顺序:
获取验证码: 获取加密的验证码。 登录:获取token 测试三个api断言
获取验证码
因为请求的验证码是加密后的uuid ,需要到redis下解密才可以,测试太麻烦,注释掉。
找到代码注释就可以
登录
token获取
了解两个知识,你创建完api接口,会发现有这俩东西Tests,Pre-request Script
Tests :后置脚本 Api 请求后的操作,一般写断言脚本的地方
Pre-request Script :后置脚本 请求前的操作
以下代码放进Tests 后置脚本当中。
var respObj = JSON.parse(responseBody);
// 获取到TOKEN,保存到环境变量中
postman.setEnvironmentVariable("token", respObj.token);
API 响应数据断言
设置全局断言函数
这里写一个response的断言函数。为了方便测试,减少很多重复代码
创建一个全局函数myGlobalFunction 变量 ,把下面代码放到变量中
递归断言函数
var deepCompare = (actual, expected, path = '') => {
for (let key in expected) {
let fullPath = path ? `${path}.${key}` : key;
if (!actual.hasOwnProperty(key)) {
tests[`${fullPath}:actualData中不存在此字段`] = false ;
}
if (actual.hasOwnProperty(key)) {
if (typeof expected[key] === 'object' && expected[key] !== null) {
if (typeof actual[key] === 'object' && actual[key] !== null) {
deepCompare(actual[key], expected[key], fullPath);
} else {
pm.test(`Field ${fullPath} has the expected type`, function () {
pm.expect(actual[key]).to.be.an('object');
});
}
} else {
if (actual[key] !== expected[key]) {
tests[`${fullPath}:actual:${actual[key]} , expected:${expected[key]}`] =actual[key]===expected[key];
}
}
}
}
}
API请求头Token添加
在你想要测试的api请求头中的Authorization 变量 上添加{**{token}}**环境变量
好处是,调用token获取api后,不用手动粘贴过来
断言脚本编写
以下代码添加到tests后置脚本中
准备以下三步
// 准备预想数据
// 获取实际数据
// 调用编写好的全局函数测试断言(复杂的另写脚本)
// 预期的 Response 数据
const expectedData = {
"msg": "操作成功",
"code": 200,
"data": {
"createBy": "admin",
"createTime": "2024-05-06 13:27:03",
"updateBy": null,
"updateTime": null,
"remark": "",
"postId": 11,
"postCode": "ceo1",
"postName": "董事长1",
"postSort": 1,
"status": "0",
"flag": false,
"test": false
}
};
// 实际的 JSON 数据
const actualData = pm.response.json();
// response断言对比
// 调用全局函数并传递参数
eval(pm.globals.get('myGlobalFunction'))
deepCompare(actualData, expectedData);
测试
可以清晰看到哪个字段错误,预想和实际值的比对结果。
这里只出力错误的。
API DB数据断言
因为Postman本身并没有提供数据库的查询功能,这时就可以利用Xmysql来实现
Postman的辅助工具Xmysql的主要作用是将数据库的表数据转换成Restful API接口,返回JSON格式的结果数据。在接口测试过程中,有时需要通过查询数据库数据来判断接口执行的结果是否正确,以校验数据的准确性。
xmysql的安装及使用
用 Postman 做接口自动化(十四)xmysql 辅助操作 mysql 数据库(一)_postman自动化打开数据库-CSDN博客
断言脚本编写
现在你要测试一个更新db的api更新完db,你要检查我的数据是否已经更新成功了
跟api一样的三步骤:
1 提前把数据库字段数据作成json数据用作预想数据。
2 利用xmysql 从数据库中检索到你更新的那条数据,用作实际数据
3 对比
// 预期的 Response 数据
const expectedData = [{
"user_id": 1,
"dept_id": 103,
"user_name": "admin",
"nick_name": "若依",
"user_type": "00",
"email": "[email protected]",
"phonenumber": "15888888888",
"sex": "1",
"avatar": "",
"password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2",
"status": "0",
"del_flag": "0",
"login_ip": "127.0.0.1",
"login_date": "2024-05-15T05:06:54.000Z",
"create_by": "admin",
"create_time": "2024-05-06T05:27:02.000Z",
"update_by": "12",
"update_time": "2024-05-15T05:06:53.000Z",
"remark": "管理员1"
}];
// 实际的 JSON 数据
const actualData = pm.response.json();
// 断言对比
// 调用全局函数并传递参数
eval(pm.globals.get('myGlobalFunction'))
deepCompare(actualData, expectedData);
response Body:跟预想值对比下就好,没啥用处
测试
问题:
按理来说只有remark字段不对
updateTime 这种时间没办法用作断言比对
在预想的时候去掉。。。// 待定
Eorr code 一览
error_code: 常见HTTP请求和响应错误码大全 The definition of errno and errmsg
Mock Server
创建Mock集合
在你的接口集合中,创建一个Mock集合
注意:不同接口集合的Mock集合是不同的,需要另行创建。
填写名字后,创建
获取一个Mock服务器地址:
创建response 例子
设置完后,点击save保存例子
创建Mock地址变量
把上面的Mock地址放到base_url变量中。
下面代码放到前置脚本中运行,方便测试调试
// postman.setEnvironmentVariable("base_url", 'localhost:8080');
postman.setEnvironmentVariable("base_url", 'xxxxxxxxxxmock.pstmn.io');
测试Mock
版权归原作者 程序猿小张哇 所有, 如有侵权,请联系我们删除。