我正在尝试使用 WireMock 创建动态模拟。我有一种情况,如果我指定 URL 像
http://localhost:8989/api/account/121
然后我应该收到这样的回复:
"cycleSpecification": {
"id": "121"
}
}
简而言之,路径参数在响应正文中返回,但我不确定应该如何捕获 121 并使用wiremock在响应中返回它。
对于这种要求
/myManagement/v1/source?filters=myParty.id==539&&myParty.role==individual
或
/myManagement/v1/source?filters=myParty.id%3D%3D539%26myParty.role%3D%individual
我可以使用什么来让响应过滤掉 id 和角色并放入响应中。
我正在使用独立的wiremock jar 2.27.2 来创建wiremock-server。
您可以通过使用响应模板来实现这一点。您需要将
--global-response-templating
添加到启动独立服务器的方式中,然后就可以使用响应模板。
我想你会想要这样的东西:
{
"request" : {
"urlPathPattern" : "/api/account/.*",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "{ \"cycleSpecification\": { \"id\": \"{{request.path.[2]}}\" } }"
}
}
对于第二个问题,如果查询参数作为单独的查询参数发送,您就可以通过请求模型引用它们。
{
"request" : {
"urlPathPattern" : "/api/account/.*",
"method" : "GET",
"queryParameters": {
"myParty.id" : {
"matches": ".*"
},
"myParty.role": {
"matches": ".*"
}
}
},
"response" : {
"status" : 200,
"body" : "{ \"cycleSpecification\": { \"id\": \"{{request.query.party.id}}\" } }"
}
}
由于您的查询参数看起来不像是单独发送的,不幸的是,我认为您需要创建一个变压器来修改您的响应。
以上答案已过时,您需要手动添加变压器,如下所示:
{
"request": {
"urlPathPattern": "/v1/api/account/[0-9]+",
"method": "GET"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json"
},
// use transformer
"transformers": ["response-template"],
"jsonBody": {
"request_id": "f7f9e747-f073-4ea8-8360-b42fc754a049",
"account": {
// use DSL to get parameter from path
"phoneNo": "{{request.path.[3]}}",
"remaining": "300",
"chargePlanList":[
{
"priority": "2",
"type": "fixedTime"
},
{
"priority": "1",
"type": "familyMember"
}
]
}
}
}
}