2015-05-11 110 views
0

我想借助Groovy解析一個具有多個聯繫人的xml文件。我想要做的是從xml文件中獲取每個聯繫人,並將其作爲REST請求的一部分逐個發送。我嘗試在XmlParser和XmlSlurper的幫助下編寫一個groovy腳本,但是這樣做並不是很成功。我對Groovy非常陌生。閱讀並暫時保存Groovy中的一個文件中的XML內容

下面是該文件的內容:

<contacts> 
    <contact> 
     <firstName>Dummy</firstName> 
     <lastName>Contact1</lastName> 
     <gender>M</gender> 
    </contact> 

    <contact> 
     <firstName>Dummy</firstName> 
     <lastName>Contact2</lastName> 
     <gender>F</gender> 
    </contact> 
</contacts> 

,這裏是我的代碼試圖使用的XmlSlurper:

import groovy.xml.* 

//get the file path 
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
def projectPath = groovyUtils.projectPath 
def f = new File(projectPath + '\\contacts - xml.txt') 

//check if file exists 
if(!f.exists()) 
{ 
    throw Exception("The XML File does not exist") 
} 

//parse file 
def xml = new XmlSlurper().parse(f) 
log.info xml 

以下是輸出我得到了上面的代碼:

DummyContact1MDummyContact2F 

我也可以訪問個體節點,例如:

log.info xml.contact[0].gender 

此外,當我使用XmlParser的,而不是的XmlSlurper,我得到這似乎更不可用的響應:

contacts[attributes={}; value=[contact[attributes={}; value=[firstName[attributes={}; value=[Dummy]], lastName[attributes={}; value=[Contact1]], gender[attributes={}; value=[M]]]], contact[attributes={}; value=[firstName[attributes={}; value=[Dummy]], lastName[attributes={}; value=[Contact2]], gender[attributes={}; value=[F]]]]]] 

有沒有一種方法,我可以從文件中讀取爲XML的內容,並將其存儲在保存xml的變量中,以便我可以簡單地將它傳遞給REST Post Request?無法知道文件中的聯繫人記錄數量或每個聯繫人的節點數量。

+0

您是否使用SoapUI-Pro? -Pro開箱即可完成這種事情。 – SiKing

+0

不幸的是沒有。使用免費版本。 – user2278764

回答

1

你在正確的軌道上XmlSlurper()。只需繼續您的腳本:

def contacts = xml.'**'.findAll { it.name().equals('contact') } 
contacts.each { 
    // do something with the contact 
    log.info it.firstName.text() 
    log.info it.lastName.text() 
    log.info it.gender.text() 
} 

請仔細閱讀documentation

您可以將每個聯繫人重寫爲相應的請求 - 您沒有指定你想要的樣子。存儲在一個變量:

testCase.setPropertyValue('myContact', myContact) 

然後在你的請求,你可以用${testCase#myContact}解開它。

即使免費版本的SoapUI也有built-in loops,所以你可以循環遍歷所有需要的次數:直到${testCase#myContact}變空。

相關問題