• 接口测试之Mock 测试


    一、Mock 测试

    1、Mock 测试的场景

    1. 前后端数据交互
    2. 第三方系统数据交互
    3. 硬件设备解耦

    2、Mock 测试的价值与意义

    1. 不依赖第三方数据
    2. 节省工作量
    3. 节省联调

    3、Mock 核心要素

    1. 匹配规则:mock的接口,改哪些接口,接口哪里的数据
    2. 模拟响应

    4、mock实战

    (1)Rewrite 原理

     

    1. 1)场景举例
    2. ①修改雪球行情页面的股票名称
    3. ②修改雪球行情页面的股票价格
    4. 2)设置方法
    5. ①Tools -> Rewrite
    6. ②勾选 Enable Rewrite
    7. ③点击下方 Add 按钮新建一个重写的规则
    8. ④在右侧编辑重写规则
    9. ⑤点击 ok 生效

     

    (2)Map Local 原理

    1. 1)场景举例
    2. ①修改雪球行情页面的股票名称
    3. ②修改雪球行情页面的股票价格
    4. 2)操作
    5. ①准备本地接口响应数据
    6. ②配置 Map Local
    7. a. 选择要进行 Map Local 的接口
    8. b. 鼠标右键 – 选择 Map Local 选项进入设置界面
    9. c. Map From 填写接口的信息
    10. d. Map To 选择本地文件
    11. ③修改 Map Local 配置:ToolsMap Local

    (3)Map Remote 原理

     

    1. 1)场景举例
    2. ①访问百度,转发至豆瓣
    3. ②访问开发环境,转发至测试环境
    4. a. 前端:http://stuq.ceshiren.com:8081/#/mapLocal
    5. b. 开发环境接口:
    6. http://stuq.ceshiren.com:8089/report/showMapLocal
    7. c. 测试环境接口:
    8. http://stuq.ceshiren.com:9098/report/showMapLocal
    9. 2)操作
    10. ①选择接口,点击鼠标右键,选择 Map Remote 进入到设置页面
    11. ②设置重定向的接口信息
    12. ③点击 ok 生效
    13. ④修改设置:Tools – Map Remote 找对对应接口双击进入修改界面

     

    二、Mock 技术体系

    1、 Mock的价值和意义

    • 提高测试深度
    • 提高测试效率
    • 降低成本

    2、 Test Double 测试替身

    • Test Double官网:https://martinfowler.com/bliki/TestDouble.html
    • Dummy 占位对象 对象被传递但从未实际使用过。通常它们仅用于填充参数列表。
    • Fake 假对象 对象实际上有工作实现,但通常采取一些捷径,这使得它们不适合生产(内存数据库就是一个很好的例子)。
    • Stubs 桩对象 为测试期间调用提供预设答案,通常根本不响应任何超出测试程序的内容。
    • Spies 间谍对象 它们还根据调用方式记录一些信息。其中一种形式可能是电子邮件服务,它记录发送了多少消息。
    • Mocks 模拟对象 是我们在这里谈论的:预先编程的对象,这些期望形成了它们期望接收的调用的规范。

    3、 测试替身关键概念的区别

     

    4、 技术架构例子

    • dummy 只要端口开着就行
    • fake 内存数据库
    • spy UI 界面后端请求记录
    • stub 假的登录后端服务
    • hook 新用户判断方法修改
    • proxy 代理转发机制
    • mock 模拟对象

    5、 Fake 假对象 定义

    假对象实际上有工作实现,但通常采取一些捷径,这使得它们不适合生产(纯内存数据库就是一个很好的例子)。

     

    6、 Fake 应⽤场景

    7、 Stub 桩定义

    为测试期间调用提供预设答案,通常根本不响应任何超出测试程序的内容。

     

    8、 Stub 应⽤场景 Swagger

    9、 Mock 模拟对象定义

    模拟预编程了期望,这些期望形成了他们期望接收的调用的规范。如果他们收到了他们不期望的调用,他们可以抛出异常,并在验证过程中进行检查以确保他们得到了他们期望的所有调用。

     

    10、 Mock 两种应用场景

    • mock on stub:按需返回期望数据
    • mock on proxy:按需返回真实数据的修改副本

    11、 常⽤的 Mock 工具

    • Charles 测试工程师常用
    • BurpSuite 黑客常用
    • Fiddler 只能 Windows 上使用
    • Nginx 服务器反向代理与修改
    • Mitmproxy 代理工具 可编程
    • Wiremock 代理工具 可编程

    12、 mitmproxy

    • 官网:https://mitmproxy.org/
    • mitmproxy是一组为HTTP/1、HTTP/2和WebSockets提供交互式、支持SSL/TLS的拦截代理的工具。

    13、 mitmproxy 强大的插件机制 Addons

    • dns
    • tcp
    • cert
    • http/https
    • websocket

     

    14、adb mock 案例

    1. import sys
    2. from mitmproxy import ctx
    3. from mitmproxy import tcp
    4. from mitmproxy.utils import strutils
    5. from mitmproxy.tools.main import mitmdump
    6. def tcp_message(flow: tcp.TCPFlow):
    7. message = flow.messages[-1]
    8. old_content = message.content
    9. message.content = old_content.replace(
    10. b":0;localabstract:webview_devtools_remote_",
    11. b": 0;localabstract:xweb_devtools_remote_"
    12. )
    13. ctx.log.info(
    14. "[tcp_message{}] from {} to {}:\n{}".format(
    15. " (modified)" if message.content != old_content else "",
    16. "client" if message.from_client else "server",
    17. "server" if message.from_client else "client",
    18. strutils.bytes_to_escaped_str(message.content))
    19. )
    20. if __name__ == '__main__':
    21. sys.argv = ["", "-p", "5038", "--rawtcp", "--mode", "reverse:http://localhost:5037/", "-s", sys.argv[0], "-vv"]
    22. mitmdump()

    15、 WireMock

    • 官网:https://wiremock.org/
    • 用于构建mock API的灵活工具。创建稳定的开发环境,将自己与古怪的第三方隔离开来,并模拟尚未存在的API。

    三、mock工具与定制化

    1、 Mitmproxy 简介

    • mitmproxy:交互式的命令行工具
      • 注意:不支持 windows

    • mitmweb:基于浏览器的界面交互工具
    • mitmdump:简单的终端输出,可以编写强大的插件和脚本
    • 官方网站:https://mitmproxy.org/

    2、 Mitmproxy 安装

    • 推荐使用 python 进行安装
    1. // 方式一
    2. pip install mitmproxy==5.2.0
    3. // 方式二
    4. pip install pipx
    5. pipx install mitmproxy==5.2.0
    6. // 验证是否安装成功
    7. mitmdump --version

    3、 PC 端证书配置

    • 配置电脑代理
    • 启动 mitmproxy
    • 在浏览器输入地址 mitm.it
    • 选择对应系统下载证书并安装

     

    4、 移动端证书配置

    • 在手机配置代理,ip 配置为电脑的 ip 地址,端口配置为 mitmproxy 监听端口
    • 启动 mitmproxy
    • 在手机浏览器输入地址 mitm.it
    • 选择 Android,下载并安装,即可成功抓取手机端的 https 的数据包。

    5、 mitmdump 参数介绍

    • -p 参数,指定监听端口,默认监听 8080
    • -s 参数,执行 python 脚本

    6、 核心组件

    • Addons(插件):https://docs.mitmproxy.org/archive/v5/addons-overview/
    • Events(事件):https://docs.mitmproxy.org/archive/v5/addons-events/

    最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

    软件测试面试小程序

    被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

    涵盖以下这些面试题板块:

    1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

    6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

      全套资料获取方式:点击下方小卡片自行领取即可

  • 相关阅读:
    AR人脸道具SDK,打造极致用户体验
    简单入门HTTP协议和HTTPS协议的相关知识点
    总结10.15
    图像的傅里叶变换
    ES6中的一些新特性
    ES 11 新特性
    《大数据:互联网大规模数据挖掘与分布式处理》(第2版)习题2.2.1解析
    VOSviewer使用方法(详细便捷)附下载网址
    新闻软文稿件媒体发布怎么做?纯干货
    EFLFK——ELK日志分析系统+kafka+filebeat架构(3)
  • 原文地址:https://blog.csdn.net/weixin_57794111/article/details/133680438