问题描述
我正在使用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"
}
}
]