1. 首页
  2. 科技部落

测试必杀技丨Mockserver项目实战

背景:在拍拍贷服务端测试过程中,被测系统依赖于一系列的第三方服务系统,被测系统与外部系统之间通过REST API进行通讯。一般情况下,需要部署好这些依赖系统,在依赖系统能够正常服务的前提下,由被测系统直接调用。然而有时被调用模块尚未开发完成,或者调用返回不好构造,这将影响被测系统的测试进度。为此我们需要开发桩模块,用来模拟被调用模块的行为。最简单的方式是,对于每个外部模块依赖,都创建一套桩模块。然而这样的话,桩模块服务将非常零散,不便于管理。Mock Server为解决这些问题而生,其提供配置request及相应response方式来实现通用桩服务。

测试必杀技丨Mockserver项目实战

名词解释

Mock规则:定义REST API请求及相应模拟响应的一份描述。

Mock虚拟环境:需要发起mock的待测服务器,有固定的测试人员负责。

整体结构

Mock Server由web配置页面Mock Admin及通用Mock hub 核心服务组成:Mock Server的web配置页面集成在已有的测试平台上,打通平台的角色,权限等核心功能,通过Mock Admin可以实现如下几个功能:

1.配置Mock虚拟环境

2.配置mock规则

Mock hub 则提供通用桩服务,对被测系统的各类REST API请求调用,返回预先定义好的模拟响应。Mock Server的整体结构如下图所示。

测试必杀技丨Mockserver项目实战

Mock hub工作原理

根据请求来源的IP设立独立的mock虚拟环境,然后根据请求的域名和URI地址以及入参等信息匹配规则返回匹配的结果。

测试必杀技丨Mockserver项目实战

案例分析

Mock接口:test1.ppdai.com /test

新建规则如下表所示:

测试必杀技丨Mockserver项目实战

模拟发送http请求:

发送请求的机器来源:XXX.XX.01

地址:http://test1.ppdai.com/test

方法:POST

参数:{“b”: 2,”A”:1}

场景1:

“测试case1”的入参规则是{}代表全匹配既默认值,符合匹配逻辑,

“测试case2”入参规则是{“b”: 2}代表匹配入参”b”: 2,符合匹配逻辑。

因此Mock hub会匹配到2条mock信息,则会返回提示信息,提醒需求人员修改mock规则

测试必杀技丨Mockserver项目实战

场景2:

当关闭规则“测试case1”后,则Mock hub会匹配到唯一1条mock信息

因此直接返回对应规则设置的返回值{“code”: 55555, “message”: “error”}

测试必杀技丨Mockserver项目实战

场景3:

当关闭所有规则时候,Mock hub找不到匹配项,(透传开关默认打开)则会透传到依赖服务器获取真实的返回值。

测试必杀技丨Mockserver项目实战

Mock hub会根据发送请求的机器IP作为判断条件之一,因此上述的请求只会匹配

XXX.XX.01机器发来的请求,其他机器的则透传请求(既不使用mock)。透传的目的是希望只mock一个服务的部分接口,而不会影响其他的接口功能,实现精准mock。

为了区分返回是mock数据还是真实的透传数据,Mock hub会在返回值的请求头中添加标识字段ismock 字段来区分。

综上即为Mockserver的实现逻辑及其在测试过程中的应用。对比市面上已有的mock,为何继续反复的造轮子,我认为没有最好的,只有最合适的。为了实现可配置,可统一管理,契合业务需求,Mockserver的开发势在必行,当然现在的Mockserver仍在起步阶段,还有很多问题等着我们去完善。