3

我正在使用wiremock-jre8-standalone-2.27.0 jar 来模拟API。我的映射 json 看起来像:

 {
  "request": {
    "url": "/sampleUrl",
    "method": "POST",
    "bodyPatterns": [
      {
        "matchesJsonPath" : {
          "expression": "$[0].fruit",
          "contains": "apple"
        },
        "matchesJsonPath" : {
          "expression": "$[0].quantity",
          "contains": "1221"
        },
        "matchesJsonPath" : {
          "expression": "$[1].fruit",
          "contains": "banana"
        },
        "matchesJsonPath" : {
          "expression": "$[2].quantity",
          "contains": "2784"
        }
      }
    ]
  },
  "response": {
    "status": 200,
    "headers": {
      "Content-Type": "application/json; charset=utf-8"
    },
    "bodyFileName": "prices.json",
    "delayDistribution": {
      "type": "uniform",
      "lower": 200000,
      "upper": 500000
    }

可以看出里面有4个matchesJsonPath,bodyPatterns但每次只比较最后一个matchesJsonPath($[2].quantity== 2784)。我是否更改了请求正文中的其余内容,例如前三个失败matchesJsonPath并通过 Postman 发送请求,我仍然得到响应。有没有办法让 Wiremock 检查所有条件?

4

1 回答 1

2

问题在于您的bodyPatterns阵列。每个匹配项都需要是数组中自己的 JSON 对象。您目前在一个对象中拥有所有匹配器。

"bodyPatterns": [
    {
        "matchesJsonPath" : {
          "expression": "$[0].fruit",
          "contains": "apple"
        }
    },
    {
        "matchesJsonPath" : {
          "expression": "$[0].quantity",
          "contains": "1221"
        }    
    },
    {
        "matchesJsonPath" : {
          "expression": "$[1].fruit",
          "contains": "banana"
        }    
    },
    {
        "matchesJsonPath" : {
          "expression": "$[2].quantity",
          "contains": "2784"
        }    
    }
]
于 2020-09-08T12:53:40.943 回答