SOAPUI xpath断言,其中id在标记内发生变化

时间:2012-10-10 02:56:06

标签: xpath soapui

我有一条错误消息,我想使用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>

1 个答案:

答案 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>

或者你可以将两者结合成一个断言...如果你想看一个例子,请告诉我。