要想实现接口的自动化测试,需要以下几个步骤:
自动登录
首先点击postman左上角的new按钮,创建一个collection,在pre-request-scripts标签下,给整个collection创建一个公用规则
编写登录脚本
pre-request-scripts在请求发送前执行的脚本,在整个集合期间只会执行一次;
在集合变量(参考上图)中添加对应的用户名和密码
//获取集合const { host, username, password } = pm.collectionVariables.toObject();
使用pm.sendRequest方法发送一个ajax请求,将请求成功的结果的token值存到环境变量中。
const data = res.json();
pm.environment.set("token", data.data["X-Access-Token"]);
完整代码如下:
const {
// host, yapiToken,
yapiHost,
variable_key,
token,
catid,
CooperationPlatformId
} = pm.variables.toObject();
const { host, username, password } = pm.collectionVariables.toObject();
const echoPostRequest = {
url: `${host}/api/login`,
method: 'POST',
header: 'Content-Type: application/json;charset=UTF-8',
body: {
mode: 'raw',
raw: JSON.stringify({ username, password})
}
};
//使用pm.sendRequest方法发送一个ajax请求,if(!token){
pm.sendRequest(echoPostRequest, function (err, res) {
console.log(err ? err : res.json());
const data = res.json();
pm.environment.set("token", data.data["X-Access-Token"]);
});
}
yapi,去哪网出的开源的可视化接口管理平台,推荐部署到公司服务器,也可以直接使用官方的。YApi-高效、易用、功能强大的可视化接口管理平台yapi.demo.qunar.com
schema格式的约束文件,值得推荐的地方就是对mockjs语法支持的很好。
{
"type": "object",
"title": "empty object",
"properties": {
"data": {
"type": "object",
"properties": {
"name": {
"type": "string",
"mock": {
"mock": "@string"
}
}
},
"required": [
"name"
]
},
"code": {
"type": "string",
"mock": {
"mock": "@natural"
}
},
"msg": {
"type": "string",
"mock": {
"mock": "@string"
}
}
},
"required": [
"data",
"code",
"msg"
]
}开放Apihellosean1025.github.io
获取接口的schema文件
yapi的开发api很方便的获取接口相关的信息。
//生成分类下接口列表的map对象const genCatInterfaceListMap = function (catid) {
return new Promise(function (resolve, reject) {
const url = `${yapiHost}/api/interface/list_cat?token=${yapiToken}&catid=${catid}&limit=100`;
pm.sendRequest(url, function(err, res){
if(err){
console.log("err: ", err)
}else{
var data = res.json();
var list = data.data.list;
var catInterfaceListMap = list.reduce((acc, item) => {
var key = item.path.slice(1).split("/").join("_");
acc[key] = item._id;
return acc;
},