MbTest/WireMock/Mock-server针对RSA加密payload的mock服务选型咨询
针对RSA加密Payload场景的Mock服务选型及适配方案
现有调研工具的适配方案
WireMock 适配方案
- 用WireMock的自定义扩展机制即可实现需求,官方原生支持Java版的
RequestMatcher扩展,其他语言的移植版本也支持钩子函数注入 - 实现逻辑:
- 开发自定义请求匹配器,在匹配阶段先调用RSA解密逻辑解析原始请求体得到明文
- 基于解密后的明文路径、参数、payload做请求规则匹配
- 匹配到预设规则后,对响应明文做RSA加密再返回给调用方
- 核心实现示例(Java版):
public class RSARequestMatcher extends RequestMatcher { @Override public MatchResult match(Request request, Parameters parameters) { // 解密原始请求体 String plainBody = RSAUtil.decrypt(request.getBodyAsString(), mockServicePrivateKey); // 匹配预设的明文规则 if (plainBody.contains(parameters.getString("expectedPlainPayload"))) { return MatchResult.exactMatch(); } return MatchResult.noMatch(); } }
- 优势:WireMock生态成熟,资源占用低,支持本地/容器化部署,自定义扩展门槛低,同部署规格下性能比Mock-server高30%以上。
Mountebank(MbTest)适配方案
- 用Mountebank的自定义predicate注入能力即可实现
- 实现逻辑:
- 编写JS自定义predicate函数,接收原始请求后解密得到明文
- 基于明文做规则匹配,匹配成功后加密预设的响应明文返回
- 配置示例:
{ "port": 8080, "protocol": "http", "stubs": [ { "predicates": [{ "inject": "function (request) { const plainBody = customRsaDecrypt(request.body, privateKey); return plainBody.includes('expected_plain_content'); }" }], "responses": [{ "inject": "function (request, state) { const respPlain = 'preset_response_plaintext'; return { body: customRsaEncrypt(respPlain, callerPublicKey) }; }" }] } ] }
- 优势:不需要编译打包,直接通过配置注入JS逻辑,调试迭代速度快,适合快速变化的测试场景。
轻量替代方案
如果两款工具都不符合使用习惯,可以基于任意轻量Web框架(FastAPI、Express)自行实现定制化Mock服务:
- 只需要实现三个核心模块:RSA加解密模块、请求匹配规则存储模块、响应生成模块
- 优势:完全定制化,不需要适配第三方工具的规则约束,适合加密逻辑复杂、匹配规则特殊的业务场景。
内容的提问来源于stack exchange,提问作者kshitij jain
相关产品推荐
相关产品推荐

