如何在Script Assertion中获取特定父元素的子元素?

时间:2017-06-22 23:45:53

标签: groovy soapui assertions

我有以下XML示例,其中显示了多次出现的节点' 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&#39;”中的值感兴趣。他们是PrevHospProduct&#39;的孩子。我对&PrevExtrasProducts&#39;下的任何值都不感兴趣。

我有以下Groovy Script Assertion in SoapUI来获取&#39; ProductCode&#39;但是测试失败了,因为实际结果也正在恢复,而D00&#39;,&#39; 900&#39;和&#39; 00A&#39;从示例回复。我只希望预期的结果能够选择价值&#39; D00&#39;,&#39; 900&#39;。

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()

1 个答案:

答案 0 :(得分:1)

首先需要找到父节点,即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()