使用 Wiremock 进行 XML 匹配

Wol*_*lzy 4 xml wiremock

我正在使用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>字段,它就会读取它。

Eri*_*ane 6

您可能希望改用 XPath 匹配,如WireMock 文档中所述。WireMock 有一些不错的 XML 功能,包括占位符,值得保留。

\n\n

X路径

\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\']"))\n
Run Code Online (Sandbox Code Playgroud)\n\n

JSON:

\n\n
{   "request": {\n    ...\n     "bodyPatterns" : [ {\n      "matchesXPath" : "//InvoiceNumber[text()=\'6\']"\n    } ]\n    ...   },   ... }\n
Run Code Online (Sandbox Code Playgroud)\n