Mock服务的设计与实现

一、什么是Mock服务/工具

  在测试过程中,对于一些不容易构造/获取的对象,创建一个 Mock 对象来模拟对象的服务/工具。比如:在测试过程中,手工构造的数据不能返回我想要的结果,从而导致程序的后续处理走不到我们期待的分支,最终造成测试的不充分。当然,Mock 服务除了有这种能力以外,还有其他优点:

解除依赖

  随着现在软件系统架构越来越复杂,一个全流程的测试通常都要走好几个系统/模块,如果各个系统/模块的开发进度不一致,提前开发好的系统/模块要进行测试,这时我们可以依赖 Mock 服务/工具来对已经开发好的系统/模块进行测试。

充分测试

  就像上面提到的,在手工测试无法构造出我们想要的数据返回时,Mock 服务能给我们返回任何想要的返回数据,这样有利于我们对程序进行充分的测试。

稳定性保障

  在做性能测试时,第三方系统如果不能接收大量请求,那么性能测试将无法进行,这时我们可以使用 Mock 服务模拟第三方系统的返回进行性能测试,同时 Mock 服务返回的数据也会比第三方系统更加稳定可靠,更加有利于我们定位自己系统的性能瓶颈。

自动化测试的支持

  如果我们发现,自动化测试的 Case 老是因为环境的不稳定导致失败,这时我们可以使用 Mock服务模拟目标服务的数据返回从而使自动化 Case 能够顺利的运行,保证自动化测试的成功率。

二、Mock服务的优缺点

优点

  • 由于其他系统模块出错引起本模块的测试错误,我们可以采用 Mock隔离,避免干预;
  • 开发过程中,只要交互双方定义好接口,团队之间可以并行工作,进程互不影响;
  • 依赖系统无法响应,或者响应异常时,可以用 Mock Object代替,快速反应,不会影响测试进度;
  • 提前接入测试,提高测试效率,当接口定义好后,测试人员就可以创建 Mock,把接口添加到自动化测试环境,提前开始测试,起到测试驱动开发效果;
  • 可以有效的增加覆盖,接口涉及入参,或者业务逻辑复杂的情况,某些场景无法通过正常手段进行操作,可以通过 Mock 虚拟模拟;

缺点

  测试过程中如果大量使用 Mock,测试的场景失去了真实性,则会导致很多场景没有得到正确的测试,所以不管 Mock 服务功能有多强大,在真实环境下必要的联调测试是必不可少的。 

三、Mock服务实现能力

  • mock所有http请求
  • 可基于url和ip进行匹配
  • 返回数据固定
  • 可实现注入 随机id,时间戳等数据的替换
  • 性能要高
  • 返回数据模板化
  • 要实现可以迁移
  • 追加: 透传

四、Mock服务的基本设计思路

  • 第一步:将被测服务请求的第三方服务的地址改为Mock服务的地址;
  • 第二步:人工请求Mock服务,添加Mock数据;
  • 第三步:正常请求被测服务;
  • 第四步:被测服务请求Mock服务,Mock服务返回数据给被测服务;

五、Mock服务的模块设计

gateway

  • 负责接收数据的注册,把注册的数据存入数据库;
  • 负责接收被测服务发过来的请求,并从数据库中查出匹配的数据返回给被测服务

core

  • 核心的逻辑处理,包括注册数据存储逻辑以及返回给被测服务的数据的查询与处理

dao

  • 负责数据库层的处理

commons

  • 枚举、工具类、POJO类、异常体系、常量等的定义

sdk

  • 接口自动化需要用到的一个模块
  • 编写接口自动化用例时,向Mock服务发送注册数据,同样是发送给gateway模块接收
  • 单独打包给接口自动化框架依赖

manager

  • 通过页面录入注册数据,和gateway模块进行关联

六、代码实现

地址:

原文地址:https://www.cnblogs.com/L-Test/p/12337493.html