我有一条错误消息,我想使用xpath断言进行确认。问题是Transaction Id更改(系统生成),而iongt:faultstring中的其余信息保持不变。
有没有一种简单的方法来做这个断言?
<iongt:retrieveSystemInformationFault xmlns:iongt="http://www.testing.com/xml/TestingIONGT">
<iongt:faultcode>TestError012</iongt:faultcode>
<iongt:faultstring>Transaction Id: 8781991797:
Testing error message here</iongt:faultstring>
</iongt:retrieveCustomerInformationFault>
使用'*'不起作用:
<iongt:retrieveSystemInformationFault xmlns:iongt="http://www.testing.com/xml/TestingIONGT">
<iongt:faultcode>TestError012</iongt:faultcode>
<iongt:faultstring>Transaction Id: *:
Testing error message here</iongt:faultstring>
</iongt:retrieveCustomerInformationFault>
答案 0 :(得分:1)
我怀疑SoapUI XPath Match Expected Result通配符必须匹配整个文本节点,而不是其中的一部分。
当然,您可以通过在预期结果中使用星号作为整个文本内容(如您所提到的那样有效),在较不精确的级别断言:
<iongt:faultstring>*</iongt:faultstring>
但是如果你需要更精确,你也可以修改你的XPath表达式,如下所示。而不仅仅是
//iongt:retrieveSystemInformationFault
例如,您可以使用此XPath表达式:
//iongt:retrieveSystemInformationFault/iongt:faultcode
预期结果为
<iongt:faultcode xmlns:iongt="http://www.testing.com/xml/TestingIONGT">TestError012</iongt:faultcode>
和XPath表达式的另一个断言
//iongt:retrieveSystemInformationFault/iongt:faultstring[starts-with(., 'Transaction Id: ') and
contains(., 'Testing error message here')]
我在这里建议contains()
,因为XPath 1.0没有ends-with()
。如果您真的需要精确而不仅仅是contains()
,那么您可以使用ends-with()
和string-length()
替换substring()
的等效内容,但我怀疑这种努力程度是否必要
上述预期结果只是
<iongt:faultstring xmlns:iongt="http://www.testing.com/xml/TestingIONGT">*</iongt:faultstring>
或者你可以将两者结合成一个断言...如果你想看一个例子,请告诉我。