Mock技术分享

Mock技术介绍

1、什么是mokc技术?
  • 在软件测试过程中,对于一些不容易构造,获取的对象,用一个虚拟的对象来替代他它,已达到相同的效果,这个虚拟的对象就是Mock
  • 在前后端分离的项目中,当后端工程师还没有完成接口的时候,前端开发可以利用Mock技术,调取一个虚拟的接口,模拟接口返回的数据,来完成前端页面的开发
  • 其实,接口测试和前端开发有一个共同点,就是都需要用到后端工程师提供的接口。所以,当我们做接口测试的时候,如果后端某些接口还不成熟、所依赖的接口不稳定或者所依赖的接口为第三方接口、构造依赖的接口数据太复杂等问题时,我们可以用mock的方式先虚拟这些接口返回来代替。提高工作效率
2、mock技术(测试桩/挡板)使用场景?
  • 后端某些接口还不成熟、不稳定、响应 时间特别长、数据太复杂;
  • 后端某些功能没有实现,自动化测试的脚本需要提前开发与调试。
  • 如果项目接口里有很多第三方接口,调用关系比较复杂,耗时比较长;
  • 某些接口没有搞定的情况下,后续又是重点,可以使用mock绕过去!
3、实现mock方案
  • 自己开发一个后端,使用django flask,这个对于一般的测试人员有很大的挑战。
    2、使用一些框架,例如 mock 减轻测试人员的开发的成本。
    3、 moco介绍

  • 实现mock的技术很多,这些技术中,可以分为两类,
    mock数据和mock服务:

    • mock数据:即 mock, 一个对象,写入一些预期的值,通过它进行自己想要的测试。
      常见的有:EasyMock、Mockito 、WireMock、JMockit。主要适用于单元测试。
    • mock 服务:即mock, 一个 sever,构造一个依赖的服务并给予他预期的服务返回值,适用范围广,更加适合集成测试。如 moco框架。
      mock是类似一个 mock 的工具框架,一个简单搭建模拟服务器的程序库/工具,下载就是一个JAR包。有如下特点:
      1、只需要简单的配置 request、response 等即可满足要求;
      2、支持 http、https、socket 协议,可以说是非常的灵活性;
      3、支持在 request 中设置 Headers , Cookies ,StatusCode 等;
      4、对 GET、POST、PUT、DELETE 等请求方式都支持;
      5、无需环境配置,有 Java 环境即可;
      6、修改配置后,立刻生效。只需要维护接口,也就是契约即可;
      7、支持多种数据格式,如 JSON、Text、XML、File 等;
      8、可与其他工具集成,如 Junit、Maven等。
4、总结
  • Moco还可以通过在json文件中添加cookies、header、重定向这些参数,来模拟各种情况下的请求和返回值,可以根据自己工作的需求去对这些东西进行了解。
  • Moco是热更新的,所以启动了jar包的服务之后,即使修改了json文件中的内容,也不需要重启服务就生效。
  • 掌握了mock测试的技术,可以让我们在开发没有完成对应接口的时候,有接口文档就提前进入到测试状态,是现在敏捷模式下不可或缺的技术,也是持续集成中一个重要的组成部分。
实战:

将mock包放在项目根目录下:

mocojar官网下载:

https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.10.0/

链接:https://pan.baidu.com/s/1rbpgOy2kfj_e5TL6MgjvoQ
提取码:2q2i

启动文件配置 9999定义端口 启动对应的json文件

启动.bat文件

order_shop.json文件 模拟配置接口数据

import requests
import time
HOST = 'http://127.0.0.1:9999'

def create_order(inData):
    url = f'{HOST}/api/order/create/'
    payload = inData
    resp = requests.post(url,json=payload)
    return resp.json()


if __name__ == '__main__':
    # startTime = time.time()#所有接口运行的开始时间
    #测试数据
    testData = {
        "user_id": "123456",
        "goods_id": "20200815",
        "num": 1,
        "amount": 200.6
    }
    print(create_order(testData))
posted @ 2021-12-15 18:37  太白之魔童降世  阅读(199)  评论(0编辑  收藏  举报