Wiremock捕获路径参数并在响应主体中返回

时间:2018-11-18 03:46:29

标签: wiremock

我正在尝试使用WireMock创建动态模拟。我遇到的情况是,如果我指定如下网址:

http://localhost:8089/api/account/abc@abc.com

然后我应该收到类似的答复:

{ 
  "account" : "abc@abc.com" 
}

简而言之,路径参数在响应主体中返回。我可以通过将urlPathPattern设置为/api/account/([a-z]*)来使请求URL通用,但是,我不确定如何捕获abc@abc.com并使用正则表达式在响应中返回它。

2 个答案:

答案 0 :(得分:2)

在WireMock中,可使用正则表达式来识别Request Matching中的电子邮件格式。出于本示例的目的,我使用了一个非常粗糙的示例。您的生产实施可能需要更可靠的方法。

此请求:

http://localhost:8181/api/account/someone@somewhere.net

与此规则匹配:

{
    "request": {
        "method": "GET",
        "urlPathPattern": "/api/account/([a-z]*@[a-z]*.[a-z]*)"
    },
    "response": {
        "status": 200,
        "jsonBody": {
            "account": "{{request.path.[2]}}"
        },
        "transformers": ["response-template"],
        "headers": {
            "Content-Type": "application/json"
        }
    }
}

并返回以下响应:

{
  "account": "someone@somewhere.net"
}

它利用WireMock中的Response Template处理功能。 Request Model variables [{{request.path.[2]}}]可用于从请求中获取节。

答案 1 :(得分:0)

同样可以使用WireMock.Net - Response-Templating

规则如下:

{
    "Request": {
        "Path": {
            "Matchers": [
                {
                    "Name": "RegexMatcher",
                    "Pattern": "^/api/account/([a-z]*@[a-z]*.[a-z]*)$"
                }
            ]
        },
        "Methods": [
            "get"
        ]
    },
    "Response": {
        "StatusCode": 200,
        "BodyAsJson": {
            "account": "{{request.PathSegments.[2]}}"
        },
        "UseTransformer": true,
        "Headers": {
            "Content-Type": "application/json"
        }
    }
}