首页 > 解决方案 > Wiremock 和 XPath 属性测试

问题描述

假设我有一个包含以下代码段的 XML 请求

<foo bar="12356"/>

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

//foo[@bar='12356']

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

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

标签: javaxmlxpathwiremock

解决方案


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

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

然后提供的 XPath 表达式会起作用。但是一旦你添加了声明,你的节点就xmlns=不再是. 结果,只匹配无前缀的元素。foo"[xmlns]":foo//foofoo


推荐阅读