i具有以下XML示例,该示例表明有多次出现节点'productCode',这些'productCode'属于两个节点" prevhospproduct",也属于'prevextrasproducts'。
<ns2:PrevHospProducts>
<ns2:PrevHospProduct>
<ns2:ProductCode>D00</ns2:ProductCode>
<ns2:ExcessPaid>Yes</ns2:ExcessPaid>
</ns2:PrevHospProduct>
<ns2:PrevHospProduct>
<ns2:ProductCode>900</ns2:ProductCode>
</ns2:PrevHospProduct>
</ns2:PrevHospProducts>
<ns2:PrevExtrasProducts>
<ns2:PrevExtraProduct>
<ns2:ProductCode>00A</ns2:ProductCode>
</ns2:PrevExtraProduct>
</ns2:PrevExtrasProducts>
对于此测试,我只对" ProductCode"中的值感兴趣,这些值是" PrevHosproduct"的孩子。我对" prevextrasproducts"下的任何值不感兴趣。
我有以下Groovy Script Assertion in SoapUI
在" productCode"中拾取值,但是测试失败了,因为实际结果也从示例响应中返回了" D00"," D00"," 900"one_answers" 00A"。我只希望预期的结果选择" D00"," 900"。
def expectedCodes = ['D00','900']
def pxml = new XmlSlurper().parseText(context.response)
def actualCodes = pxml.'**'.findAll{it.name() == 'ProductCode' }*.text() as List
assert expectedCodes.sort() == actualCodes.sort()
首先需要查找父节点,即PrevHospProduct
,然后获取ProductCode
。
这是script assertion
:
def expectedCodes = ['D00','900']
def pxml = new XmlSlurper().parseText(context.response)
def actualCodes = pxml.'**'.findAll{it.name() == 'PrevHospProduct'}*.ProductCode*.text() as List
log.info actualCodes
assert expectedCodes.sort() == actualCodes.sort()