Wiremock 和 XPath 属性测试

Wiremock and XPath attribute testing

假设我有一个 XML 请求包含以下片段

<foo bar="12356"/>

我的服务将此代码段发送到另一个服务来执行操作。该服务需要一个具有 bar 属性且没有文本节点的 foo 节点。下面的表达式正好匹配那个节点

//foo[@bar='12356']

问题是 Wiremock 期望文本节点出现在匹配的 foo 节点中,因此,它认为前面的表达式不匹配。

使用 wiremock 如何测试 XML 匹配属性而不是文本节点?

根据 XPath 规范,命名空间很重要。如果 xml 文件如下

<?xml ...>
<Envelope>
    <foo bar="12356"/>
</Envelope>

那么所提供的 XPath 表达式就可以工作了。但是一旦你添加了 xmlns= 声明,你的节点就不再是 foo 而是 "[xmlns]":foo。因此,//foo 仅匹配无前缀的 foo 元素。