Wiremock独立版动态映射响应值:无法动态获取transformerParameters值
WireMock响应模板动态映射问题解决方案
问题概述
使用WireMock独立版结合响应模板功能时,需要根据请求中的user id(取自request.pathSegments.[1]),从transformerParameters的usernameMapping映射表中动态获取对应的username,但常规模板写法无法实现动态取值。
当前响应映射配置:
{ "response": { "status": 200, "headers": { "Content-Type": "application/json" }, "transformers": [ "response-template" ], "transformerParameters": { "usernameMapping": { "1": "foo", "2": "bar", "3": "baz" } }, "jsonBody": { "id": "{{request.pathSegments.[1]}}", "username": "{{parameters.usernameMapping.2}}" } } }
尝试过的无效写法:
{{parameters.usernameMapping[request.pathSegments.[1]]}}{{parameters.usernameMapping[{{request.pathSegments.[1]}}]}}{{parameters.usernameMapping.{{request.pathSegments.[1]}}}}{{parameters.usernameMapping.[userId]}}(userId已提前赋值)
解决方案
WireMock的响应模板基于Handlebars语法,动态通过变量访问对象属性时,必须使用**lookup辅助函数**,这是你之前遗漏的关键语法。
修改jsonBody中的username字段写法即可:
"jsonBody": { "id": "{{request.pathSegments.[1]}}", "username": "{{lookup parameters.usernameMapping request.pathSegments.[1]}}" }
原理说明
Handlebars不支持直接用obj[var]或obj.{{var}}的方式动态访问属性,lookup辅助函数专门用于解决这类场景:
- 第一个参数传入目标对象(此处为
parameters.usernameMapping) - 第二个参数传入要访问的属性名(此处为请求路径中的user id:
request.pathSegments.[1])
该写法完全依赖WireMock内置功能,无需自定义扩展或编译自定义版本。
内容的提问来源于stack exchange,提问作者Franco
相关产品推荐
相关产品推荐

