0

我返回了一条错误消息,我想使用 xpath 断言对其进行确认。问题是事务 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>
4

1 回答 1

1

我怀疑 SoapUI XPath 匹配预期结果通配符必须匹配整个文本节点,而不是一个的一部分。

当然,您可以通过对预期结果中的整个文本内容使用星号来在不太精确的级别上断言(正如您提到的那样有效):

<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()and string-length()substring()但我怀疑这种努力是必要的。

以上的预期结果将只是

<iongt:faultstring xmlns:iongt="http://www.testing.com/xml/TestingIONGT">*</iongt:faultstring>

或者您可以将两者合并为一个断言......如果您想查看一个示例,请告诉我。

于 2012-10-12T14:13:59.247 回答