【问题标题】:Request body matching in WireMock (not JSON/XML)WireMock 中的请求正文匹配(不是 JSON/XML)
【发布时间】:2016-12-22 09:16:50
【问题描述】:

我正在尝试使用独立的 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"
      }
   }
}

但是,我的主要要求是处理 google 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。 是的,key 是 type 的一部分,type 是 animal 的一部分。如何实现此请求正文匹配?

【问题讨论】:

    标签: json mocking jsonpath wiremock


    【解决方案1】:

    你可以这样做:

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

    还有https://github.com/tomakehurst/wiremock/issues/575

    【讨论】:

    • 这是另外一个:"bodyPatterns" : [ { "contains": "type: CREDIT" } ]
    • 这条评论帮助了我。如果您有引号,则需要像 "bodyPatterns" : [ { "contains": "\"type\": \"CREDIT\"" } ] 一样对它们进行转义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多