0

我有以下 xml 查询:

     <return>
        <code>success</code>
        <message/>
        <deal>
           <checksum>203591</checksum>
           <documentID>21783</documentID>
           <dealStatus>P</dealStatus>
           <financing>
              <financeType>L</financeType>
              <term>32</term>
           </financing>
           <options>
              <disclosureType/>
              <frontBackFlag>P</frontBackFlag>
              <hardSoftFlag>M</hardSoftFlag>
              <optionCode>TO</optionCode>
              <optionDescription>QAfhggddate DOCID  219</optionDescription>
              <optionOrigin>xxx</optionOrigin>
              <optionPrice>
                 <optionPricingType>INVIICE</optionPricingType>
                 <price>111.99</price>
              </optionPrice>
              <optionPrice>
                 <optionPricingType>RETAIL</optionPricingType>
                 <price>2.99</price>
              </optionPrice>
              <optionResidualAmount>3.99</optionResidualAmount>
              <residualTableAmount>0.00</residualTableAmount>
              <residualTableFlag>N</residualTableFlag>
              <satisfiedDate>2012-05-08T00:00:00-06:00</satisfiedDate>
           </options>
        </deal>
     </return>

我需要设置一个检查点来验证上述响应是否只有我们规范中提到的字段。例如。optionPrice 应该只有 optionPricingType 和价格标签。那么如何编写 xpath 或 xqery 来获取 optionPrice 下的所有标签标签,而不需要它们的值。

我正在使用 SOAP UI 来放置断言

4

2 回答 2

2
  1. 根据 SoapUI 的“功能测试”文档,您可以对模式合规性做出断言。我建议使用此工具来验证响应是否符合您的规范。

  2. 如果您想/必须使用 XPath,这里有一些想法。假设 XPath 2.0 在 SoapUI 中可用,“XPath 和 XQuery Match 断言都使用了支持该领域大多数最新标准的 Saxon XPath / XQuery 处理器”。参考:验证 XML 消息

(#2 继续...)您可以测试已知元素的存在(所有预期结果都是正确的):

boolean(/return)
boolean(/return/code)
boolean(/return/deal)
boolean(/return/deal/checksum)

等等。请注意,这不会测试元素排序,这对您可能很重要,也可能不重要。

您可以测试是否存在未知元素(预期结果为真):

min(for $elName in //*/local-name() return $elName = ('return','code','message','deal','checksum','documentID','dealStatus','financing','financeType','term','options','disclosureType','frontBackFlag','hardSoftFlag','optionCode','optionDescription','optionOrigin','optionPrice','optionPricingType','price','optionPrice','optionPricingType','price','optionResidualAmount','residualTableAmount','residualTableFlag','satisfiedDate'))

min请注意使用布尔列表有效地实现逻辑与传递每个单独的标签名称测试结果的技巧。

您可以通过 XPath 断言进行各种其他抽查,但如果可能,请尝试使用 #1 中提到的模式一致性工具。

于 2013-10-01T12:37:35.313 回答
1

下一个 XPath 将从以下位置提取节点名称optionPrice

/return/deal/options/optionPrice/*/local-name()
于 2013-10-01T09:45:19.103 回答