在Wiremock映射json BodyPatterns中,仅发生最后的比较

问题描述

我正在使用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
    }

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

解决方法

问题出在您的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"
        }    
    }
]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...