2017-06-22 36 views
1

我有以下XML示例,它顯示節點'ProductCode'出現在節點'PrevHospProduct'和'PrevExtrasProducts'下。如何在Script Assertion中拾取特定父元素的子元素?

   <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'中的'PrevHospProduct'的子項感興趣。我對'PrevExtrasProducts'下的任何值都不感興趣。

我有以下Groovy Script Assertion in SoapUI拿起'ProductCode'中的值,但測試失敗,因爲實際結果也返回示例響應中的'D00','900'和'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() 

回答

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

感謝再次,饒。當你知道如何做的時候,它非常有意思,看起來很容易! – Matt

+0

@Matt,很高興知道它有幫助。 – Rao

相關問題