动态wiremock捕获路径参数并返回响应

问题描述 投票:0回答:2

我正在尝试使用 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。

mocking wiremock wiremock-standalone
2个回答
2
投票

您可以通过使用响应模板来实现这一点。您需要将

--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}}\" } }"
  }
}

由于您的查询参数看起来不像是单独发送的,不幸的是,我认为您需要创建一个变压器来修改您的响应。


0
投票

以上答案已过时,您需要手动添加变压器,如下所示:

{
  "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"
          }
        ]
      }
    }
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.