我正在使用wiremock 设置一个虚拟PHP 服务器,并希望根据传递的XML 字段之一进行匹配。我基本上会有多个请求进入同一个网址,但它们之间的主要区别是发票号码。我的wiremock JSON 看起来像这样
{
"request": {
"method": "ANY",
"urlPattern": ".*/test.php",
"bodyPatterns" : [{
"equalToXml": "<InvoiceNumber>6</InvoiceNumber>"
}]
},
"response": {
"status": 200,
"bodyFileName": "sample.xml",
"headers": {
"Content-Type": "application/xml"
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用 Postman 并且只传递带有字段的 XML 时,这工作得很好<InvoiceNumber></InvoiceNumber>,但是当我添加辅助字段时,它会失败。
我希望能够将任何 Xml 传递给wiremock,只要它有该<InvoiceNumber></InvoiceNumber>字段,它就会读取它。
您可能希望改用 XPath 匹配,如WireMock 文档中所述。WireMock 有一些不错的 XML 功能,包括占位符,值得保留。
\n\nX路径
\n\n如果属性值是有效的 XML 并且与提供的 XPath 表达式匹配,则视为匹配。如果 XPath 计算返回任何元素,则 XML 文档将被视为匹配。WireMock 委托给 Java\xe2\x80\x99s 内置 XPath 引擎(通过 XMLUnit),因此直到(至少)Java 8 它支持 XPath 版本 1.0。
\n\n爪哇:
\n\n.withRequestBody(matchingXPath("//InvoiceNumber[text()=\'6\']"))\nRun Code Online (Sandbox Code Playgroud)\n\nJSON:
\n\n{ "request": {\n ...\n "bodyPatterns" : [ {\n "matchesXPath" : "//InvoiceNumber[text()=\'6\']"\n } ]\n ... }, ... }\nRun Code Online (Sandbox Code Playgroud)\n