首先解释一下什么是mock接口。
Mock通常是指,在测试一个对象时,我们构造一些假的对象来模拟与其交互。而这些Mock对象的行为是我们事先设定且符合预期。通过这些Mock对象来测试对象在正常逻辑,异常逻辑或压力情况下工作是否正常。
引入Mock最大的优势在于:Mock的行为固定,它确保当你访问该Mock的某个方法时总是能够获得一个没有任何逻辑的直接就返回的预期结果。Mock接口就是用一些合理的手段构造对象去模拟真实接口,达到我们需要的测试效果。测试场景有哪些呢?
依赖的上游项目的接口尚未开发完成,下游无法进行联调,一直处于等待状态;
接口不满足目前的测试需求。虽然接口已经实现,但是个别字段/返回不满足测试要求;
常见的 一些Mock 方式:
将模拟数据直接写在代码里
利用 JavaScript 拦截请求
利用 Charles、 Fiddler 等代理工具拦截请求
。。。。。。。
等等
如何将这些Mock接口管理起来就成了一个问题,好在现在市面上已经有不少这种平台,比如
Doclever
Rap2
Easy-Mock
下面借用一张图来说明一下Mock平台的优势
通过这张图我们可以发现,通过Mock平台,可以实现前后端并行开发,甚至测试也能参与进来。可以极大地提高工作效率。
简单介绍Mock之后,我们可以来实际操作了。这里我在本地部署了一套Easy-Mock平台,具体部署流程自行Github,或者咨询小编
我在后台创建了一个Mock接口,实现一个简单的响应式js,见下图。
{
success: "@guid",
default: "用户名或密码错误",
data: {
_req: function({
_req
}) {
return _req
},
message: function({
_req,
Mock
}) {
if (_req.query.username === 'zhufc' && _req.query.password === '12345a') {
var token = Mock.mock('@guid');
var result = "{" + "'token'" + ":'" + token + "','msg':" + "'登录成功'" + "}"
return result
} else if (_req.query.username === '') {
return '用户名不能为空'
} else if (_req.query.password === '') {
return '密码不能为空'
} else {
return this.default
}
}
}
}
大概意思就是通过接口传入一个time参数,接口判断如果参数名称是now,那么接口实时返回当前时间,如果传入的参数是id,那么接口返回一个随机的字符串。这里涉及到一些mock语法。可以参考下面的文档
现在可以去前台调试一下接口了
完成这些工作之后,可以将这个接口写到Jmeter中进行调试,可以看到两种不同的结果。
我们也可以将接口文档中的预期返回值填入到Mock中去模拟结果,从而使接口测试摆脱对环境的依赖,实现真正的敏捷。
关于平台如何搭建,可以联系小编哦~