• 【接口测试学习】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

    作者:gtea 博客地址:https://www.cnblogs.com/gtea
  • 相关阅读:
    element ui el-date-picker 判断所选时间是否交叉
    MDN中的箭头函数!!!
    es6 解构
    element ui 实现可编辑表格
    节流 防抖。。。。深入理解
    element ui 表格对齐方式,表头对齐方式
    纯html + css 导航栏
    PHP 1
    apache 建立虚拟主机
    Can't connect to local MySQL server through socket '/tmp/mysql.sock'
  • 原文地址:https://www.cnblogs.com/gtea/p/12715903.html
Copyright © 2020-2023  润新知