在WireMock中请求正文匹配(不是JSON / XML)

时间:2016-12-22 09:16:50

标签: json mocking jsonpath wiremock

我正在尝试使用独立线程创建API模拟。响应主体依赖于请求主体中的属性。

使用JSON,我能够做到。以下是示例映射:

{
   "request":{
      "method":"POST",
      "bodyPatterns":[
         {
            "matchesJsonPath":"$.somekey.subkey[?(@.attribute == 'VALUE_123')]"
         }
      ]
   },
   "response":{
      "status":200,
      "bodyFileName":"res.dat",
      "headers":{
         "Content-Type":"application/x-proto;charset=UTF-8"
      }
   }
}

然而,我的主要要求是处理谷歌protobuf,我正在尝试使用文本格式来代替嘲讽者将用来模拟API以进行响应。因此,请求文件采用文本格式,并且没有任何JSON验证,如双引号,或每行末尾的逗号等。

我发现使用JSON路径,由于格式不正确,wiremock无法匹配请求正文。 例如,像这样的请求:

{
animal {
type {
key1: "value"
key2: value2
}
}
}

而不是

{  
   "animal":{  
      "type":{  
         "key1":"value",
         "key2":"value2"
      }
   }
}

让我们说key1 = value1应该匹配并且应该返回response1.json,或者当key1 = someOtherValue时,那么response2.json应该是回。 是的,关键是类型的一部分,类型是动物的一部分。如何实现此请求正文匹配?

1 个答案:

答案 0 :(得分:3)

你可以这样做:

{
  "request": {
  "method": "POST",
    "url": "/authorize/oauth2/token",
    "bodyPatterns": [ {
          "matches": ".username=(test)&."
      }
    ]
  },
  "response": {
    "status": 200,
    . . .

另外https://github.com/tomakehurst/wiremock/issues/575