网站首页 > 技术文章 正文
一、mock类型
1、方法级别 mock:mock 的对象是一个函数调用,例如获取系统环境变量。
2、类级别 mock:mock 的对象是一个类,例如一个 HTTP server。
3、接口级别 mock:mock 的对象是一个 API 接口。
4、服务级别 mock:mock 的对象是整个服务。比如前端工程师自测试时,可以讲后端整个服务都 mock 掉,这其实等同于将后端的所有接口都 mock。
二、接口mock注入的五种方式
使用mock进行接口测试时,一般要做两件事情,即打桩和调桩。
打桩就是创建mock桩,指定 API 请求内容及其映射的mock响应内容;所谓调桩就是被测服务来请求mock桩并接收mock响应。
事实上,在打桩和调桩之间还有一件重要的事情,即mock桩的注入(mock injection)。
1、什么是mock注入?
mock的本质就是用模拟桩来替换真实的依赖。所谓mock桩注入就是阻断被测服务与真实服务之间的链路,建立被测服务与mock之间的链路过程。
2、如何注入mock?
总的来说mock桩的注入方式与架构、被测服务的架构等因素相关。常见的mock 桩注入方式包括但不限于以下五种。
(1)API 请求构造
在mock接口中被测服务是API的请求方,即客户端;依赖服务是API的响应方,即服务端。根据mock工作的位置,mock可以分为客户端mock和服务端mock。
客户端mock:mock 在被测服务内部工作,直接拦截被测服务的API请求方法(比如 HTTP Client方法),在被测服务调用API请求方法时,直接从方法内部返回预定义的mock响应。
服务端mock:mock在被测服务外部工作,作为HTTP服务器接收被测服务发送的API请求,并返回预定义的mock响应。
客户端mock的注入其实就是改造被测服务的API请求方法,即在API请求方法中加入mock 处理逻辑。当满足某些条件时执行mock分支,不满足时执行真实分支。
可以通过两种方式实现,一种是直接改造源代码,另一种是利用字节码增强技术对字节码进行改造(Java 语言)。
API请求改造这种注入方式适用于客户端mock,优势是性能极好,不足是实现成本较高。
(2)本地配置
对于服务端mock,打桩之后会生成唯一的mock桩地址。被测服务要想调用这个桩需要知道桩地址,如何让被测服务知道桩地址呢?一种最直接的方法就是被测服务提供一个依赖服务地址配置项,在需要使用mock时将依赖服务地址修改成mock地址。
本地配置的优势是实现简单,不足之处是修改配置项需要重启被测服务,在需要进行mock 服务与真实服务切换时不方便。
(3)配置中心
在服务端mock中,为了避免修改依赖服务地址配置项导致被测服务重启,可以采用配置中心(如 Spring Cloud Config Server)存储和管理依赖服务地址配置,或者使用注册中心(如 Spring Cloud Eureka)记录服务与服务地址的映射关系。
使用配置或者注册中心时,mock注入的方法是修改配置中心,将依赖服务地址改成mock地址。这种注入方法不需要重启被测服务,但是从配置改变到配置生效可以存在一定的延时。
(4)反向代理
在微服务架构下,被测服务与依赖服务之间可能不是直连的,而是经过了一层反向代理,例如API网关。在这种情况下,被测服务是通过调用API网关来间接调用依赖服务的接口。
在 API 网关模式下,mock注入的具体做法就是修改API网关配置,将依赖服务API网关接口绑定的地址改成mock地址。
这种注入的优势是对被测服务无侵入,并且实现更细粒度(接口级)的mock。当然,根据 API网关的实现不同,仍然可能存在一定的时延。
(5)前向代理
服务端mock除了作为HTTP服务器,还可以兼备HTTP代理的功能,这种架构又叫做mock 代理,例如mock server proxy。对于mock代理来说,它不仅能够返回mock响应,而且能够在需要的时候将API请求转发给依赖服务,并将依赖服务的真实响应返回给被测服务。
使用前向代理模式,mock注入的方式是将被测服务的依赖地址或网络代理修改为mock地址,这种注入方法需要重启被测服务,其优势是能够实现细粒度的mock,并且能够根据录制的真实响应自动生成mock。
五种方式对比如下:
三、mock两大功能
mock两大功能:(1)记录真实的调用信息;(2)生成模拟的返回信息;
对于测试用例来说,不仅关心mock是否返回了期望的结果,还需要关心SUT是否以期望的方式调用了mock对象。
如果SUT没有以期望的方式调用,比如:没有传参或者参数不对,那么SUT就存在问题。
mock需要详细记录来自SUT的调用信息,并提供给用例来校验。
四、常用 mock 工具
1、单元测试级别
easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等。
2、接口测试级别
接口级别的mock工具完成的主要功能是对一个用户的请求,模拟server返回一个接口的响应数据。常用的有:
- Wiremock
- Mockserver
- Moco
- Mock.js
- RAP
猜你喜欢
- 2024-10-06 想要mock你的网络请求?还不快来学习Charles
- 2024-10-06 测试工具链—— AnyProxy搭建HTTP(S)代理服务器构建Mock服务(一)
- 2024-10-06 Mock工具wiremock-py mock工具类静态方法返回值
- 2024-10-06 当 Swagger 遇上 Torna,瞬间高大上了
- 2024-10-06 Mockjs POST和GET不同参数返回不同结果的实现方法
- 2024-10-06 mock介绍及moco框架搭建使用 mockoa
- 2024-10-06 对于依赖第三方的接口如何进行测试?
- 2024-10-06 本地部署easy-mock 本地部署sd的最低配置要求
- 2024-10-06 利用 apipost 生成mock数据 怎么生成api接口
- 2024-10-06 Mock工具之Moco使用教程 mock新手教程
你 发表评论:
欢迎- 501℃几个Oracle空值处理函数 oracle处理null值的函数
- 497℃Oracle分析函数之Lag和Lead()使用
- 495℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 482℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 478℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 468℃【数据统计分析】详解Oracle分组函数之CUBE
- 454℃Oracle有哪些常见的函数? oracle中常用的函数
- 450℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
-
- Directus 火了!无代码 SQL 数据的协作应用利器!
- PHP和NodeJS的代码执行效率比较(php和nodejs的区别)
- 工商银行获得发明专利授权:“基于数据库映射动态接口的前端页面应用开发方法及装置”
- FAISS和Chroma:两种流行的向量数据库的比较
- 什么是数据库的索引?(数据库索引的定义和作用)
- Vercel和Neon“首次”推出用于前端云的无服务器SQL数据库
- 记一次前端逻辑绕过登录到内网挖掘
- 学Access好还是MySQL好?(access与mysql的语句区别)
- 惬意!清晨慢品 HTML canvas 标签题,面试知识轻松 get
- 前端实现知识图谱-force(d3.js)(前端知识树)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)