干货!用大白话告诉你什么是Mock测试

前端 2023-07-05 17:29:38
49阅读

初见mock

做为一个形容词,mock是仿真模拟、模仿的意思;做为一个专有名词,mock是可以效仿真正目标个人行为的仿真模拟目标。

在自动化测试中,mock所仿真模拟的对象是什么呢?

它一定并不是大家所检测的目标,只是 SUT 的依靠(dependency)。也就是说,mock 的功效是仿真模拟 SUT 依靠目标的个人行为。

检测的目标一般称作SUT(Software Under Test)

文本不太好了解,大家画上图,如下图所显示,被检测目标是 A,A 依靠的是B,B 依靠的是 C。而我们要 mock 的是 B 的个人行为。图上 A 便是 SUT。

照片

为何必须仿真模拟 B 的个人行为呢?

(1)提升 A 的检测普及率。A 依靠 B,实质上依靠的是 B 的回到結果,换句话说 B 的回到結果会危害 A 的个人行为。根据 mock B 我们可以结构各种各样一切正常和出现异常的来源于 B 的回到結果,进而更充足检测 A 的个人行为。

(2)防止 B 的要素进而对 A 造成危害。依靠真正的 B 去检测 A 很有可能有很多难题:B 的开发设计沒有过去进行时没法检测 A;B 有阻塞性肺气肿bug 时没法检测 A;B 的依靠 C 有阻塞性肺气肿 bug 时没法检测 A;

(3)提升 A 的检测高效率。B 的真正个人行为很有可能比较慢,而 B 的仿真模拟个人行为是十分快的,因而能够 加速 A 的检测实行速率。

mock 人种

普遍的 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)。

什么叫 mock 引入?

mock 的实质便是用仿真模拟桩来更换真正的依靠。说白了 mock 桩引入便是阻隔被测服务项目与真正服务项目中间的链接,创建被测服务项目与 mock 中间的链接全过程。

照片

怎样引入 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 网关ip。在这类状况下,被测服务项目是根据启用 API 网关ip来间接性启用依靠服务项目的插口。

在 API 网关ip方式下,mock 引入的具体方法便是改动 API 网关ip配备,将依靠服务项目 API 网关ip插口关联的详细地址改为 mock 详细地址。

这类引入的优点是对被测服务项目无入侵,而且完成更粗粒度(插口级)的 mock。自然,依据 API 网关ip的完成不一样,依然很有可能存有一定的延迟。amazon AWS 的 API 网关ip便是选用这类方法开展 mock。

照片

(5)前向代理商

服务器端 mock 除开做为 HTTP 网络服务器,还能够兼具 HTTP 代理商的作用,这类构架又称为 mock 代理商,比如 mock server proxy。针对 mock 代理商而言,它不但可以回到 mock 回应,并且可以在必须的情况下将 API 要求发送给依靠服务项目,并将依靠服务项目的真正回应回到给被测服务项目。

应用前向分销模式,mock 引入的方法是将被测服务项目的依靠详细地址或代理服务器改动为 mock 详细地址,这类引入方式 必须重新启动被测服务项目,其优点是可以完成粗粒度的 mock,而且可以依据视频录制的真正回应自动生成 mock。

照片

五种引入方法比照

一张报表小结一下

照片

不容忽视的mock两大作用

有关 mock,常常非常容易误解的是:觉得 mock 仅仅仿真模拟回到的結果罢了。

事实上 mock 还能够出示两大作用:(1)纪录真正的启用信息内容;(2)转化成仿真模拟的回到信息内容;

照片

针对功能测试而言,大家不但关注 mock 是不是回到了期待的結果,还必须关注 SUT 是不是以期待的方法启用了 mock 目标。

假如 SUT 沒有以期待的方法启用,例如:沒有传参或是主要参数不对,那麼 SUT 就存在的问题。

mock 必须详尽纪录来源于SUT 的启用信息内容,并出示给测试用例来校检。例如 Java mockito 就出示了该类校检作用:

List mockedList = mock(MyList.class);

mockedList.size();

// 校检 size 调用函数且只启用了1次

verify(mockedList, times(1)).size();

常见 mock 专用工具

单元测试卷等级

这一等级的mock专用工具有easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等,有关分别优势与劣势大伙儿能够 网上查看。

接口测试等级

插口等级的mock专用工具进行的关键作用是对一个客户的要求,仿真模拟server回到一个插口的回应数据信息。常见的有:

Wiremock

Mockserver

Moco

Mock.js

RAP

mock 并不是银弹

讲了这么多 mock 的益处,事实上 mock 也是有许多不够,例如:

(1)mock 很有可能造成 难题忽略。mock 的仿真模拟个人行为与真正个人行为很有可能存有 GAP,造成 根据 mock 的检测尽管根据了,可是根据真正目标的检测却失败了,这代表着难题被忽略了。mock 难以仿真模拟全部的具体情况。

(2)mock 产生较高的维护保养成本费。根据 mock 的功能测试构造非常复杂,完成和维护保养都不易,中后期被测编码有变化时必须兼容 mock 编码。

简易一句话:mock 并不是银弹。

有心态的小结

mock 并不是银弹,mock 是有好有坏的,一张图小结一下:

照片

讲了这么多,工作中如何正确应用 mock 呢?这儿提二点提议,敲黑板划重点啦。

(1)不必过多应用 mock。功能测试中把握好应用 mock 的度。在涉及到互联网浏览、数据库查询读写能力、电脑操作系统互动等系统软件级启用,优先选择应用 mock。

(2)不必过多依靠根据 mock 的检测結果。根据 mock 的检测不管多么的充足,这都不可以确保不发生难题的忽略。一个详细的检测对策一定是由根据 mock 的检测和根据非 mock 的检测一同构成的,二者紧密联系缺一不可。

the end
免责声明:本文不代表本站的观点和立场,如有侵权请联系本站删除!本站仅提供信息存储空间服务。