相信很多测试同学跟我一样在做UI自动化时都因为环境以及测试数据不稳定的问题苦恼,确实这个是做UI自动化测试时最大的痛点,那么该怎么解决这个问题呢,其实我们可以使用mock server来解决这个问题,这篇文章我主要介绍下json-server这个工具的使用方法,希望可以帮助到大家。官方文档:https://www.npmjs.com/package/json-server
安装方法:
在终端执行:npm install -g json-server
ps:前边已经安装过node和npm,所以可直接使用
在终端执行json-server -v,成功输出版本号证明安装成功
- 使用方法
-
先找一个需要mock的接口,确定接口返回的数据,这里我找了两个接口来举例
http://leisurehuang.qicp.vip:3000/auth/login
{
“success”: 1,
“code”: “QYjQoY”
}
http://leisurehuang.qicp.vip:3000/annual_leaves/list
{
“success”: 1,
“annual_leave”:[
{
“id”: 1537,
“name”: “王璐”,
“emplo_id”: 25805,
“annual_vacation_taken”: 1,
“annual_vacation_left_to_month”: -0.2,
“annual_vacation_left_to_year”: 9,
“dep”: “PS”,
“primary_role”: “Quality Analyst”,
“home_office”: “Xi’an”,
“comment”: null,
“as_of_date”: “2020-01-31”
},
{
“id”: 3497,
“name”: “王璐”,
“emplo_id”: 25805,
“annual_vacation_taken”: 5,
“annual_vacation_left_to_month”: -3.4,
“annual_vacation_left_to_year”: 5,
“dep”: “PS”,
“primary_role”: “Quality Analyst”,
“home_office”: “Xi’an”,
“comment”: null,
“as_of_date”: “2020-02-29”
}
],
“new_token”: “eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Imx1LndhbmdAdGhvdWdodHdvcmtzLmNvbSIsInVpZCI6ImY4NDY4MjI3LTc1NDctNGQyNC05OGZiLWRjMGE3ZjhjMzY3NiIsImV4cCI6MTU4NzIxNTc1Nn0.wOylToPEQQdOpAuBAEzBN826Ur8GTDOKyQfvgTqv6VQ”
} -
创建一个文件夹,在里边新建一个leavestatus.json文件作为数据源,内容如下:
{
“login”:
{
“success”: 1,
“code”: “eqQRlG”
},
“list”:
{
“success”: 1,
“annual_leave”: [{
“id”: 1537,
“name”: “王璐”,
“emplo_id”: 25805,
“annual_vacation_taken”: 1.0,
“annual_vacation_left_to_month”: -0.2,
“annual_vacation_left_to_year”: 9.0,
“dep”: “PS”,
“primary_role”: “Quality Analyst”,
“home_office”: “Xi’an”,
“comment”: null,
“as_of_date”: “2020-01-31”
}, {
“id”: 3497,
“name”: “王璐”,
“emplo_id”: 25805,
“annual_vacation_taken”: 5.0,
“annual_vacation_left_to_month”: -3.4,
“annual_vacation_left_to_year”: 5.0,
“dep”: “PS”,
“primary_role”: “Quality Analyst”,
“home_office”: “Xi’an”,
“comment”: null,
“as_of_date”: “2020-02-29”
}],
“new_token”: “eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Imx1LndhbmdAdGhvdWdodHdvcmtzLmNvbSIsInVpZCI6ImY4NDY4MjI3LTc1NDctNGQyNC05OGZiLWRjMGE3ZjhjMzY3NiIsImV4cCI6MTU4NzIxNTc1Nn0.wOylToPEQQdOpAuBAEzBN826Ur8GTDOKyQfvgTqv6VQ”
}
} -
你会发现请求/auth/login对应数据源中的”login”,/annual_leaves/list对应数据源中的“list”,那么要怎么对应起来呢,这时候就用到了路由,可以在刚刚创建的文件夹中再创建一个routes.json文件,文件内容如下:
{
“/auth/": “/$1”,
"/annual_leaves/”: “/$1”
}
该路由的作用就是将/auth/login映射到/login,将/annual_leaves/list映射到/list
官方文档中还有更多路由的用法,可以根据需要使用。
由于login接口是post请求,每次调用都会添加一条新的记录,返回body必须包含字段id,中且id会自动递增,与本次mock的需求不符,所以又在刚刚的文件夹中创建了一个middle.js脚本,将post请求转换为get请求,这样就实现了post请求每次返回固定的body。
//middle.js
module.exports = (req, res, next) => {
if (req.method === ‘POST’) {
req.method = ‘GET’;
}
next()
};
- 启动jsonserver
进入刚刚创建的文件夹下,执行json-server leavestatus.json --routes routes.json --middlewares middle.js
如果嫌每次启动都要执行这么长一串命令比较麻烦,可以在刚刚创建的文件夹下新建一个package.json文件,在scripts中可以把这段命令加进去,后边直接用npm start就可以启动服务。
“scr
ipts": {
“start”: “json-server leavestatus.json --routes routes.json --middlewares middle.js”
},
- 这个时候你在postman调用http://localhost:3000/login和http://localhost:3000/list,你会发现返回的数据和数据源中的一致。
- 自动化测试中需要modk的接口肯定是真实的域名而不是localhost:3000,这个时候只需要将本地的host改成对应的域名即可,类似:127.0.0.1 leisurehuang.qicp.vip 这样,这样就大功告成啦!
其实jsonserver也可以结合mockjs一起使用,mockjs参考:http://mockjs.com/,mockjs可以根据不同的规则生成随机数据,使用方法也比较简单,只需要把刚刚json格式的数据源文件替换成生成随机数据的js文件即可。