官方文档地址:https://hellosean1025.github.io/yapi/documents/adv_mock.html
下文为我个人的见解,如有错误,欢迎指出。
为什么要使用mock?
(1) 最重要的一点:团建可以并行工作。
1、现在大部分项目都是前后端分离的了,这就需要提前协商定义好接口,方便异步开发。只要前后端协议好接口规范以及数据结构,就可以各自干自己的活儿了,只有在项目的联调阶段才需要沟通,大大的降低了沟通成本。
2、对于后端来说,如果两个接口之间有耦合,那么也可以通过mock来解决,只需要提前定义好接口规范以及数据结构即可。
3、对于测试来说,编写自动化测试脚本过程中、或准备测试用例过程中,可以通过mock来解决。
(2)用于单元测试
单元测试是最容易发现bug的测试,也是成本最低的测试(以上纯属个人见解),在对一个“单元”进行测试时,如果耦合了其他模块,而这个模块又没有开发完成时,可以使用mock来替代,而且最好是使用mock来替代,实现模块解耦。
(3)用于模拟不容易获取的资源
在开发/测试过程中,有时候需要依赖某个资源,而这个资源有无法轻易获取到(如有墙等),可以通过mock解决这个痛点。
(3)用于隔离系统
测试接口的过程中,某些请求会“污染”环境,如post请求会生成很多测试数据,delete请求会删除一些必要数据,可以通过mock来解决。
(5)解决一些接口限制
有些系统不支持重复请求,或有访问访问频次限制。如不可重复支付,获取敏感信息的接口访问频次不可高于xx等。
使用mock
- 方式一:json-schema 开启 json-schema 功能后,根据 json-schema 定义的数据结构,生成随机数据。
首先,我们建立一个简单的json-schema,如下图所示:
1、默认值:如果需要设置默认值,那么可以填入任意字符串,数据返回永远是设置的默认值。
2、基于mock.js占位符的mock,一些常用的占位符如下:
@integer(min?, max?)
返回一个随机的整数。
- min:可选参数,整数最小值。
- max:可选参数,整数最大值。
例:
@integer //--> 1686805249110932 @integer(10,100) //--> 26
@float( min?, max?, dmin?, dmax? )
返回一个随机浮点数。
- min:可选,整数部分最小值。
- max:可选,整数部分最大值。
- dmin:可选,小数部分最小长度。
- dmax:可选,小数部分最大长度。
例:
@float //--> 1924364975802932.5 @float(60, 100, 2, 6) //--> 68.1258
@string
返回随机字串,有如下几种使用方式:
@string
@string(length)
@string(pool, length)
@string(min, max)
@string(pool, min, max)
- length: 字串长度
- min: 字串最短长度
- max: 字串最大长度
- pool:表示字符池。如果传入 'lower'、'upper'、'number'或'symbol',表示从内置的字符池从选取。对应关系如下:
- lower: "abcdefghijklmnopqrstuvwxyz"
- upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- number: "0123456789"
- symbol: "!@#$%^&*()[]"
例:
@string(6) //--> kV(qj4 @string('upper',2,6) //--> NJKU @string('123abc!@#', 2,6) //--> #ab!21
@url(protocol?, host?)
随机生成一个 URL。
- protocol:指定 URL 协议。例如 http。
- host:指定URL域名和端口号。
例:
@url('https', '123.sogou.com') //--> https://123.sogou.com/ccdkttr
@ip
随机生成一个IP地址。
@timestamp
返回当前unix时间戳
@datetime(format?)
返回一个随机的日期和时间字符串。
- format:生成的日期和时间字符串的格式。默认值为yyyy-MM-dd HH:mm:ss。
例:
@datetime() //--> 1977-11-17 03:50:15 @datetime('y-M-d H:m:s') //--> 02-4-23 2:49:40
@pick(arr)
从数组中随机选取一个元素,并返回。
例:
@pick(['this', 'is', 'picker', 'test']) //--> picker