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
元素。
假设我有一个 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
元素。