高效接口测试(五)

02 更智能地模拟数据:如何开发好的Mock服务

2.1 什么是Mock?它能干什么?

Mock这个概念在很多测试领域都存在,它最早出现在单元测试过程中。因为在接口测试中也经常被用到,所以大家耳熟能详的Mock一般是指接口中的Mock。

Mock是指在测试过程中,对于一些不容易构造/获取的对象,创建一个Mock来模拟对象的行为

如果模拟的是一个函数或者模块,它的原理就是这样的:

mock2-1.jpg

mock2-2.jpg

如果模拟的是一个服务(Http、RPC等等都可以),它的原理就是这样的:

mock1.jpg

看图就会明白,我们好像挡住了真正的服务,模拟了一个自定义的假服务,所以我们经常把Mock也叫做挡板。

我们暂时不讨论单元测试中的Mock,也就是第一张图的情况,只研究接口测试过程中的Mock。

我们为什么要模拟这个服务?为什么不去直接访问它呢?原因主要有几下几点:

  • 前后端分离在项目中应用的越来越普遍,我们如果Mock掉后端的接口服务,按照项目约定的接口文档返回指定格式的数据,会给前端开发团队带来极大的方便。等到项目集成测试(联调)阶段只需要拿掉挡板即可。这样做会提升团队整体开发效率。
  • 在微服务架构下服务与服务之间的开发也是相对独立,在这种场景下Mock也能发挥和上一条应用中一样的价值。
  • 在我们日常的接口测试中会经常遇到调用第三方接口的需求,比如,我们的订单确认接口会调用支付宝、微信的支付接口,拿到返回结果后才能完成整个业务流程;我们的商品查询接口,需要调用第三方商家的库存服务等等。在这类测试中,测试人员会遇到三种不太方便的场景:第一个是第三方接口可能暂时无法调用,我们的业务流程无法继续下去。第二个是我们需要模拟第三方接口的错误情况,比如支付超时、商家下线无法提供服务等等。第三个是如果对方没有提供测试接口或沙箱环境,我们就需要真实交易、真实支付,这样会引发垃圾数据还涉及到金额损失和退款。此时如果Mock掉第三方服务,是不是就会方便很多呢?测试结束后,切换回真实地址即可。

2.2 有什么工具可以快速建立起一个Mock服务呢?

1. Easy-Mock

Easy Mock 是一个可视化,并且能快速生成 模拟数据 的持久化服务,我们可以登录 https://www.easy-mock.com/

注册账号快速开始Easy-Mock之旅。

但是这个网站不稳定,经常刷新后报错或进不去等问题。能不能自己搭建这个环境呢?

准备工作

nodejs (>=8.9.1)
MongoDB (>=3.4.1)
Redis (>=4.0)

这三个工具的安装,我就不再占用篇幅了。原因嘛,和我上课不讲环境配置一样(你细品)。但是有个坑还是要提前说一下,官网的要求是MongoDB>=3.4.1,Redis>=4.0这个一定要遵守。

https://www.mongodb.com/try/download/community

安装下载easy mock

#克隆代码到本地
git clone https://github.com/easy-mock/easy-mock.git
#进入easy-mock目录
cd easy-mock
#安装插件
npm install

注意:在启动之前需要修改config/default.json,修改后如下图所示:

mock3.jpg

访问easy mock

#启动easy-mock
nmp  run  dev

mock4.jpg

输入http://localhost:7300 ,可以看到easy-mock首页

mock5.jpg

使用easy-mock

私服搭建好了,我们就进去看看,如何使用它模拟一个接口服务。

官方文档永远是你的第一手学习资料:https://easy-mock.com/docs

1. 创建一个项目

mock6.png

2.在刚刚创建的项目中创建接口

mock7.png

3.预览接口

mock8.png

Easy Mock 支持基于 Swagger 创建项目,以节省手动创建接口的时间。Swagger 文档更新也能通过更新操作重新生成接口,并且这是智能的,只会对修改过的接口进行更新。

参考咱们之前对Swagger的讲解,Easy Mock 这个功能真的很香!!!