如何在Wiremock Standalone中复用接口生成的warehouse_id值?
Wiremock Standalone 实现接口间状态复用方案
要解决你遇到的问题,核心是利用Wiremock的**场景(Scenarios)**功能结合响应模板,将/api/product/{id}生成的warehouse_id存储下来,供/api/warehouse/接口复用。以下是具体实现步骤:
1. 启动Wiremock时启用响应模板功能
Wiremock的模板和场景功能需要显式启用,启动命令如下:
java -jar wiremock-jre8-standalone-<版本号>.jar --enable-response-templating
2. 修改/api/product/{id}存根:生成并存储warehouse_id
这个存根会在首次请求时生成随机warehouse_id,同时将其存入场景变量,标记场景状态为已生成:
{ "request": { "urlPattern": "/api/product/([0-9]+)", "method": "GET" }, "response": { "status": 200, "jsonBody": { "data": { "id": "{{request.path.[3]}}", "name": "product name", "warehouse_id": "{{warehouseId}}" } }, "transformers": ["response-template"], "scenarioName": "WarehouseIdScenario", "requiredScenarioState": "Started", "newScenarioState": "WarehouseIdGenerated", "setScenarioState": { "warehouseId": "{{warehouseId}}" }, "preTemplateScript": "{{#assign \"warehouseId\"}}{{randomInt lower=1 upper=100}}{{/assign}}" } }
preTemplateScript:提前生成随机warehouse_id并赋值给临时变量,避免重复生成导致不一致scenarioName:定义场景名称,确保两个接口关联同一个场景setScenarioState:将临时变量的值存入场景全局变量warehouseId
3. 修改/api/warehouse/存根:复用场景中的warehouse_id
这个存根会读取场景中存储的warehouseId,替换第一个仓库的ID:
{ "request": { "urlPattern": "/api/warehouse/", "method": "GET" }, "response": { "status": 200, "jsonBody": { "data": [ { "id": "{{scenario.variables.warehouseId}}", "address": "John av. 12", "capacity": 1000 }, { "id": "{{randomInt lower=1 upper=100}}", "address": "Vernon ave 79", "capacity": 500 } ] }, "transformers": ["response-template"], "scenarioName": "WarehouseIdScenario", "requiredScenarioState": "WarehouseIdGenerated" } }
requiredScenarioState:确保只有在/api/product/{id}请求完成(场景状态变为WarehouseIdGenerated)后,这个存根才会生效{{scenario.variables.warehouseId}}:直接读取场景中存储的warehouse_id
4. 重置场景状态(可选)
如果需要重新生成新的warehouse_id,可以通过Wiremock的Admin接口重置场景:
curl -X POST http://localhost:8080/__admin/scenarios/WarehouseIdScenario/reset
或者直接重启Wiremock服务。
内容的提问来源于stack exchange,提问作者lojz
相关产品推荐
相关产品推荐

