如何通过文件存根实现Wiremock动态调整响应属性?
用Wiremock单文件存根实现动态属性缺失场景响应
完全可以用单个文件存根实现这种动态调整,核心是利用Wiremock的响应模板功能,结合测试初始化阶段传入的参数来控制响应中属性的存在与否,不用维护大量重复存根。
具体实现步骤
开启响应模板功能
启动Wiremock时添加参数:wiremock --enable-response-templating,或者在配置文件中启用模板支持。编写通用单文件存根
存根中使用Handlebars模板语法,通过条件判断来控制属性是否返回。比如根据请求头传递的缺失属性列表,动态生成响应:{ "request": { "method": "GET", "url": "/api/b" }, "response": { "status": 200, "body": "{{#with (parseJson (header 'X-Missing-Props'))}} { {{#unless (contains this 'id')}}\"id\": \"123\",{{/unless}} {{#unless (contains this 'name')}}\"name\": \"test\",{{/unless}} {{#unless (contains this 'age')}}\"age\": 25,{{/unless}} {{#unless (contains this 'email')}}\"email\": \"test@example.com\"{{/unless}} } {{else}} {\"id\": \"123\", \"name\": \"test\", \"age\": 25, \"email\": \"test@example.com\"} {{/with}}", "headers": { "Content-Type": "application/json" } } }这个存根会读取请求头
X-Missing-Props的值(比如["id", "email"]),然后过滤掉对应的属性;如果没有这个头,就返回完整属性的正常响应。测试初始化阶段动态配置
在每个测试用例的初始化步骤中,给调用API A的请求添加对应的X-Missing-Props头,比如:- 测试缺失
age属性:设置请求头X-Missing-Props: ["age"] - 测试缺失
name和email:设置X-Missing-Props: ["name", "email"]
Wiremock会根据这个头的值,动态渲染出对应属性缺失的响应。
- 测试缺失
进阶优化
- 如果需要更复杂的属性逻辑,可以自定义Wiremock模板函数,比如写一个函数接收完整JSON和缺失属性列表,直接返回过滤后的JSON字符串,让存根更简洁。
- 也可以用查询参数替代请求头传递缺失属性列表,比如请求
/api/b?missing=id,email,然后在模板中解析这个参数。
这种方式只需要维护一个存根文件,所有属性缺失场景都通过测试初始化时的参数来控制,和编程方式的灵活性一致,同时保留了文件存根的可维护性。
内容的提问来源于stack exchange,提问作者Mohit K.
相关产品推荐
相关产品推荐

