接口测试之Mock 测试

news2024/11/27 11:47:13

一、Mock 测试

1、Mock 测试的场景

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

2、Mock 测试的价值与意义

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

3、Mock 核心要素

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

4、mock实战

(1)Rewrite 原理

 

1)场景举例
    ①修改雪球行情页面的股票名称
    ②修改雪球行情页面的股票价格

2)设置方法
    ①Tools -> Rewrite
    ②勾选 Enable Rewrite
    ③点击下方 Add 按钮新建一个重写的规则
    ④在右侧编辑重写规则
    ⑤点击 ok 生效

 

(2)Map Local 原理

1)场景举例
    ①修改雪球行情页面的股票名称
    ②修改雪球行情页面的股票价格

2)操作
    ①准备本地接口响应数据
    ②配置 Map Local
          a. 选择要进行 Map Local 的接口
          b. 鼠标右键 – 选择 Map Local 选项进入设置界面
          c. Map From 填写接口的信息
          d. Map To 选择本地文件
    ③修改 Map Local 配置:Tools – Map Local

(3)Map Remote 原理

 

1)场景举例
    ①访问百度,转发至豆瓣
    ②访问开发环境,转发至测试环境
        a. 前端:http://stuq.ceshiren.com:8081/#/mapLocal
        b. 开发环境接口:
        http://stuq.ceshiren.com:8089/report/showMapLocal
        c. 测试环境接口:
        http://stuq.ceshiren.com:9098/report/showMapLocal

2)操作
    ①选择接口,点击鼠标右键,选择 Map Remote 进入到设置页面
    ②设置重定向的接口信息
    ③点击 ok 生效
    ④修改设置: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 案例

import sys

from mitmproxy import ctx
from mitmproxy import tcp
from mitmproxy.utils import strutils
from mitmproxy.tools.main import mitmdump


def tcp_message(flow: tcp.TCPFlow):
    message = flow.messages[-1]
    old_content = message.content
    message.content = old_content.replace(
        b":0;localabstract:webview_devtools_remote_",
        b":   0;localabstract:xweb_devtools_remote_"
    )

    ctx.log.info(
        "[tcp_message{}] from {} to {}:\n{}".format(
            " (modified)" if message.content != old_content else "",
            "client" if message.from_client else "server",
            "server" if message.from_client else "client",
            strutils.bytes_to_escaped_str(message.content))
    )


if __name__ == '__main__':
    sys.argv = ["", "-p", "5038", "--rawtcp", "--mode", "reverse:http://localhost:5037/", "-s", sys.argv[0], "-vv"]
    mitmdump()

15、 WireMock

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

三、mock工具与定制化

1、 Mitmproxy 简介

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

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

2、 Mitmproxy 安装

  • 推荐使用 python 进行安装
// 方式一
pip install mitmproxy==5.2.0

// 方式二
pip install pipx
pipx install mitmproxy==5.2.0

// 验证是否安装成功
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、计算机基础

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四位十进制频率计VHDL,DE1开发板验证,仿真和源码

名称:四位十进制频率计VHDL,DE1开发板验证 软件:Quartus 语言:VHDL 要求: 数字频率计设计要求 1、四位十进制数字显示的数学式频率计,其频率测量范围为10~999%khz,测量单位为kHz。 2、要求量程能够转换。即测几十…

课题学习(五)----阅读论文《抗差自适应滤波的导向钻具动态姿态测量方法》

一、简介 抗差自适应滤波:利用等价权函数和自适应因子合理的分配信息,有效地滤除钻具振动对动态姿态测量的影响。、   针对导向钻井工具动态测量受钻具振动的影响而导致测量不准确的问题,提出一种抗差自适应滤波的动态空间姿态测量方法。通…

Kubernetes 加入主节点报错

现象 原因: 之前已经加入过一次 解决方案 [rootk8s-node01 k8s_images]# kubeadm reset [reset] WARNING: Changes made to this host by kubeadm init or kubeadm join will be reverted. [reset] Are you sure you want to proceed? [y/N]: y

基于Springboot实现校园新闻网站管理系统演示【项目源码+论文说明】

基于Springboot实现校园新闻网站管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个校园新闻网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述校…

苹果ios打包签名ipa文件应用app的验证的证书是怎么授信的原理是什么?

苹果打包应用的证书依靠的是公钥基础设施(Public Key Infrastructure,PKI)原理。 首先咱们要知道苹果的验证是基于PKI系统,PKI是一套基于非对称加密算法的加密体系,通过证书来验证和确保通信双方的身份和数据的完整性…

c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))

上篇文章介绍了一些常用的字符串函数,大家可以跳转过去浏览一下:c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(上))_总之就是非常唔姆的博客-CSDN博客 今天接着来介绍一些&#x…

scala数组函数合集

目录 1. 添加类函数 2.生成类函数 3.删除类函数 4.查找类函数 5.统计类函数 6.修改类函数 7.判断类函数 8.获取集合元素 9.集合操作类函数 10.转换类函数 11.工具类函数 12.集合内与集合间计算函数 在 scala 中Array数组是一种可变的、可索引的数据集合 创建数组…

C/C++ 进程间通信system V IPC对象超详细讲解(系统性学习day9)

目录 前言 一、system V IPC对象图解 1.流程图解: ​编辑 2.查看linux内核中的ipc对象: 二、消息队列 1.消息队列的原理 2.消息队列相关的API 2.1 获取或创建消息队列(msgget) 实例代码如下: 2.2 发送消息到消…

关于Jupyter markdown的使用

一级标题 #空格 标题1 二级标题 ## 空格 标题2 三级标题 ###空格 标题3 无序; 有序: 数学符号:

MySQL:主从复制-基础复制(6)

环境 主服务器 192.168.254.1 从服务器(1)192.168.254.2 从服务器(2)192.168.253.3 我在主服务器上执行的操作会同步至从服务器 主服务器 yum -y install ntp 我们去配置ntp是需要让从服务器和我们主服务器时间同步 sed -i /…

1.Linux入门基本指令

个人主页:Lei宝啊 愿所有美好如期而遇 目录 01.ls指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令(重要) 06.rmdir&&rm指令(重要) 07.man指令(重要) 08.cp指令(重要) 09.mv指令(重要) 10.cat指令 nano指令 echo指令 输出重定向 追加重…

day25--JS进阶(递归函数,深浅拷贝,异常处理,改变this指向,防抖及节流)

目录 浅拷贝 1.拷贝对象①Object.assgin() ②展开运算符newObj {...obj}拷贝对象 2.拷贝数组 ①Array.prototype.concat() ② newArr [...arr] 深拷贝 1.通过递归实现深拷贝 2.lodash/cloneDeep实现 3.通过JSON.stringify()实现 异常处理 throw抛异常 try/catch捕获…

强化学习------DQN算法

简介 DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。Q-Learing算法维护一个Q-table,使用表格存储每个状态s下采取动作a获得的奖励,即状态-价值函数Q(s,a),这种算法存在很…

数据结构:链式二叉树

上一章讲了堆,堆是完全二叉树的顺序存储结构,本章将要全面讲解一下二叉树的链式存储结构即链式二叉树 我们已经学习了二叉树的概念和性质了,本章重点学习二叉树相关操作,可以更好的理解分治算法思想;也需要对递归有更深次的理解. 其实普通的链式二叉树的增删查改没有什么意义,…

COLLABORATIVE DESIGNER FOR SOLIDWORKS® 新功能

共享和标注 优点:收件人在浏览器中访问共享文 件,无需安装3DEXPERIENCE 平台应用程序。 • 与 SOLIDWORKS 中来自您组织内部或外部的任何人无缝 共享您的设计。 • 直接将评论和标注附加到您的设计作品中,便于立即获得 反馈。 支持 SOLIDWO…

深入理解强化学习——强化学习的基础知识

分类目录:《深入理解强化学习》总目录 在机器学习领域,有一类任务和人的选择很相似,即序贯决策(Sequential Decision Making)任务。决策和预测任务不同,决策往往会带来“后果”,因此决策者需要为…

Centos7安装MongoDB7.xxNoSQL数据库|设置开机启动(骨灰级+保姆级)

一: mongodb下载 MongoDB 社区免费下载版 MongoDB社区下载版 [rootwww tools]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.1.0-rc4.tgz 二: 解压到指定目录 [rootwww tools]# mkdir -p /usr/local/mongodb [rootwww tools]# tar -zxvf mongodb-…

Linux目录和文件查看命令

一、Linux 的目录结构 Linux 的目录结构是一个树状结构,以根目录(/)为起点,以下是常见的 Linux 目录结构的主要内容: / 根路径 ├── bin: 存放系统指令(命令),如ls、cp、mv等&…

ARM-流水灯

.text .global _start _start: 1、设置GPIOE寄存器的时钟使能 RCC_MP_AHB$ENSETR[4]->1 0x50000a28LDR R0,0X50000A28 LDR R1,[R0] 从R0起始地址的4字节数据取出放在R1 ORR R1,R1,#(0X3<<4) 第4位设置为1 STR R1,[R0] 写回2、设置PE10、PE8、PF10管脚为输出模式 …

Observability:使用 OpenTelemetry 对 Node.js 应用程序进行自动检测

作者&#xff1a;Bahubali Shetti DevOps 和 SRE 团队正在改变软件开发的流程。 DevOps 工程师专注于高效的软件应用程序和服务交付&#xff0c;而 SRE 团队是确保可靠性、可扩展性和性能的关键。 这些团队必须依赖全栈可观察性解决方案&#xff0c;使他们能够管理和监控系统&a…