我对body和bodyMatchers部分的行为感到困惑。
例如合同响应。
我希望我的使用者(存根)从文件中获得一个正文(存根中的确切响应),而生产者只为响应提供一些匹配器(以验证响应)。
我尝试了1个案例:
...
body (
file('__files/someFile.json')
)
bodyMathers {
jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}
预期-结果:
我对json正文和响应部分的解决方法:
为生产者正文添加某些内容,否则测试响应中没有匹配项:
body (
$(
consumer(
file('__files/someFile.json')
),
producer(
cards: [
cardType: anyNonEmptyString()
]
)
)
)
bodyMathers {
jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}
我很快看到了一个问题- bodyMatchers需要主体,但是它不直观。
响应可能只有生产者(测试)匹配器,而请求可能只有消费者的匹配器(存根)。
我认为它应该像这样工作:
body (
$(
consumer(
file('__files/someFile.json')
)
)
)
bodyMathers {
jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}
已更新:
request {
body(
file('__files/offer13-request.xml').asString()
)
bodyMatchers {
xPath('/a/b/c/text()', byRegex('123'))
}
}
我在存根上看到:
{
"matchesXPath" : {
"expression" : "/soap:Envelope/@xmlns:soap",
"equalTo" : "http://schemas.xmlsoap.org/soap/envelope/"
}
}, {
"matchesXPath" : {
"expression" : "/a/b/c/text()",
"matches" : "123"
}
}
但是我只需要我的匹配者"expression" : "/a/b/c/text()"
答案 0 :(得分:0)
我希望我的使用者(存根)从文件中得到一个正文(存根中的确切响应),而生产者只为响应提供一些匹配器(以验证响应)。
那不是它的工作方式。
body (
file('__files/someFile.json')
)
bodyMathers {
jsonPath('$.[cards[0]].cardType', byRegex('[A-Z]{2}')
}
表示
1)您在文件someFile.json
中有一个正文
2)将对其进行解析,并像json文件中所述对正文的每个部分进行分析
3)对于具体的json路径,将进行正则表达式验证(仅适用于该json路径)
我很快看到了一个问题-bodyMatchers需要身体,但它不直观。
由于它是bodyMatcher
,因此需要一个正文。因为它是身体匹配器,所以这很有意义。如果它是标头的匹配器,则需要标头。