背景:在拍拍贷服务端测试过程中,被测系统依赖于一系列的第三方服务系统,被测系统与外部系统之间通过REST API进行通讯。一般情况下,需要部署好这些依赖系统,在依赖系统能够正常服务的前提下,由被测系统直接调用。然而有时被调用模块尚未开发完成,或者调用返回不好构造,这将影响被测系统的测试进度。为此我们需要开发桩模块,用来模拟被调用模块的行为。最简单的方式是,对于每个外部模块依赖,都创建一套桩模块。然而这样的话,桩模块服务将非常零散,不便于管理。Mock Server为解决这些问题而生,其提供配置request及相应response方式来实现通用桩服务。
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的整体结构如下图所示。
根据请求来源的IP设立独立的mock虚拟环境,然后根据请求的域名和URI地址以及入参等信息匹配规则返回匹配的结果。
Mock接口:test1.ppdai.com /test
新建规则如下表所示:
模拟发送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规则
场景2:
当关闭规则“测试case1”后,则Mock hub会匹配到唯一1条mock信息
因此直接返回对应规则设置的返回值{“code”: 55555, “message”: “error”}
场景3:
当关闭所有规则时候,Mock hub找不到匹配项,(透传开关默认打开)则会透传到依赖服务器获取真实的返回值。
Mock hub会根据发送请求的机器IP作为判断条件之一,因此上述的请求只会匹配
XXX.XX.01机器发来的请求,其他机器的则透传请求(既不使用mock)。透传的目的是希望只mock一个服务的部分接口,而不会影响其他的接口功能,实现精准mock。
为了区分返回是mock数据还是真实的透传数据,Mock hub会在返回值的请求头中添加标识字段ismock 字段来区分。
综上即为Mockserver的实现逻辑及其在测试过程中的应用。对比市面上已有的mock,为何继续反复的造轮子,我认为没有最好的,只有最合适的。为了实现可配置,可统一管理,契合业务需求,Mockserver的开发势在必行,当然现在的Mockserver仍在起步阶段,还有很多问题等着我们去完善。