cover_image

信也API Mock平台实践

rpf 拍码场
2023年02月28日 02:24

背景

在测试过程中,被测系统经常会依赖其它模块、下游接口或外部接口。由于依赖系统的稳定性和可用性对于整个项目的进度至关重要,任何依赖系统出现问题都可能导致严重的延误和成本增加。此外,由于测试环境的限制,有些测试场景可能无法完全覆盖,这可能会导致在生产环境中出现意外问题。因此,为了保障项目的顺利进行和提升测试的效率,需要寻求能够解决上述问题的方案。

问题

  • 测试A模块时,由于依赖的B模块因为环境不稳定,导致A模块的测试无法按计划正常进度执行,产生延期

  • 测试内部系统功能的时候,由于依赖的外部系统因为网络等原因,导致内部系统的测试延期

  • 由于测试环境的局限性,可能有些测试场景无法全部覆盖,可能需要真实的生产环境才有这种场景,但这势必就会增加发生产生事故的风险

方案确定

经过多种方案的调研与比较,最后确定使用底层基于WireMock组件,来搭建信也的Mock平台。

WireMock是一种轻量级的HTTP模拟服务器,它可以模拟HTTP服务的行为并返回自定义响应。WireMock提供了一个REST API,使您可以轻松配置模拟服务器,并且可以与Java应用程序或其他测试框架集成。WireMock可以在测试中模拟各种HTTP场景,例如模拟缓慢响应、超时响应、网络中断、HTTP错误码等。

架构与原理

系统架构图

图片

系统架构图中,Mock服务分为两部分,规则匹配配置管理功能,规则匹配专门负责监听接收请求过来的API,然后将响应数据返回给上游,有独立的负载均衡;而配置管理功能负责前台页面对Mock的管理操作,也有自己的负载均衡,两者负载均衡独立,互不影响。

  • Mock配置管理:用户可以设置http匹配的规则,支持匹配http的Method、url、请求头、请求参数全匹配、请求参数单属性等,并且可以设置命中之后的返回体、模拟状态码、模拟超时等。当请求未命中时,还可以自定义设置请求转发的地址,Mock配置规则在多环境之间彼此独立,互不影响。

  • 规则匹配:服务启动后,监听从特定端口的请求,获取请求之后,将请求丢给规则匹配模块处理,处理完成之后,将返回体返回给上游api。

实现原理:启动Mock服务的时候,会初始化一个WireMock,首先会配置Stub,然后启动WireMock并将配置的Stub加载到WireMock,随后就监听特定端口的http请求,这些请求会被WireMock捕获,交给后续的匹配逻辑来处理,最后返回设置的mock数据。

@Bean  public WireMockServer wireMockServer() {      return initWireMockServer();  }    public WireMockServer initWireMockServer() {      WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().maxRequestJournalEntries(Integer.valueOf(wireMockMaxEntry))              .port(Integer.valueOf(wireMockPort))              .extensions(returnTransFormer));     wireMockServer.stubFor(any(anyUrl()).atPriority(0).willReturn(aResponse()             .withTransformer("return-transformer", "mock", "mock678")));      List<MockRuleTemplate> templates = mockRuleTemplateMapper.selectList();     for (MockRuleTemplate t : templates) {         MockInterfaceConstanse.TEMPLATE_MAP.put(t.getId(), t.getTemplate());     }     wireMockServer.start();     return wireMockServer;  }

Mock一个接口主要分为如下两步:

1)页面上配置站点的Mock策略,设置需要返回的mock数据;

2)发送请求到mock服务上,服务获取请求的request数据,根据匹配规则,返回设置的mock数据;如果没有匹配到规则,则将请求转发透传到设置的目标服务器,获取目标服务器的返回结果,最终返回给上游的请求。▼图片

实践

  • Mock策略管理页面,下面所示:

图片

  • 每条策略配置详情,包括设置常规http字段,还包括设置环境、正则、匹配规则和返回体,下图所示:

图片

  • 日志记,可以查看命中或者转发的请求记录,见下图所示:

图片

总结

API Mock管理平台能够提高测试和研发工作的效率,使得一些难以覆盖的测试场景得以全面覆盖,从而保障产品的质量。不过,该API Mock还存在一些不足,例如暂时不支持HTTPS的mock,否则需要手动将HTTPS改为HTTP才可以实现Mock,但未来将会持续进行优化和改进。

作者介绍

rpf,信也科技资深测试开发专家

招聘信息

Java、大数据、前端、测试等各种技术岗位热招中,欢迎扫码了解~

图片

继续滑动看下一个
拍码场
向上滑动看下一个