我有两条带有命名空间的xml消息,这些命名空间本质上是相同的xml,但是match表示它们并不相同。
请查看以下功能。 xmlString1和xmlString2本质上是相同的xml。只有名称空间前缀不同。我不确定match是否匹配xml相等性? 有没有一种方法可以使XML与名称空间匹配?
Feature: Test xml match
Scenario: test xml match with namespaces
* def xmlString1 =
"""
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:b="anotherUri">
<soapenv:Header/>
<soapenv:Body>
<b:validateEmailAddressRequest>
<request>
<email>some@domain.com</email>
</request>
</b:validateEmailAddressRequest>
</soapenv:Body>
</soapenv:Envelope>
"""
* def xmlString2 =
"""
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="anotherUri">
<soapenv:Header/>
<soapenv:Body>
<a:validateEmailAddressRequest>
<request>
<email>some@domain.com</email>
</request>
</a:validateEmailAddressRequest>
</soapenv:Body>
</soapenv:Envelope>
"""
* xml xml1 = xmlString1
* xml xml2 = xmlString2
* match xml1 == xml2
16:49:04.363 [main] ERROR com.intuit.karate - assertion failed: path: /soapenv:Envelope/_/soapenv:Body, actual: '<soapenv:Body><b:validateEmailAddressRequest><request><email>some@domain.com</email></request></b:validateEmailAddressRequest></soapenv:Body>', expected: '<soapenv:Body><a:validateEmailAddressRequest><request><email>some@domain.com</email></request></a:validateEmailAddressRequest></soapenv:Body>', reason: all key-values did not match, expected has un-matched keys: [a:validateEmailAddressRequest]
xml-match.feature:34 - path: /soapenv:Envelope/_/soapenv:Body, actual: '<soapenv:Body><b:validateEmailAddressRequest><request><email>some@domain.com</email></request></b:validateEmailAddressRequest></soapenv:Body>', expected: '<soapenv:Body><a:validateEmailAddressRequest><request><email>some@domain.com</email></request></a:validateEmailAddressRequest></soapenv:Body>', reason: all key-values did not match, expected has un-matched keys: [a:validateEmailAddressRequest]
答案 0 :(得分:0)
欢迎您为此提供修复。同时,您可以执行此操作。请注意,您无需转换为xml,即使使用三引号多行形式,def xml1
也足够。您可能会对text
感到困惑。
* xmlstring xml2 = xml2
* xml xml2 = xml2.replaceAll('(</?)a:', '$1b:').replace('xmlns:a', 'xmlns:b')
* match xml1 == xml2