2016-05-31 66 views
0

我對Groovy和SOAPUI完全陌生。如何使用groovy更新響應xml並打印它

情景:比較兩個XML響應(兩者屬於不同的項目)

方法嘗試:捕捉響應和寫入文件的響應,比較這兩個文件。

面臨的問題:時間戳不匹配既要求在不同時間

由於上述問題,我試圖讓時間戳的節點值,並將其更改爲*兩者的響應運行。 但我無法寫入更改的響應值。

Groovy腳本:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context); 
log.info(groovyUtils.projectPath); 
def holder = groovyUtils.getXmlHolder("loginRequest#Response") 
holder.setNodeValue("//ns3:loginUserResponse[1]/ns3:loginUserResponse/userModel/auditModel/timestamp", "1"); 

最初def holder持有響應XML,但得到在支架上的XML後,我更新的節點值。我不知道如何進一步進行。我需要將更新的xml寫入文件。

+0

你看到什麼錯誤?請問Stacktrace? – Rao

+0

您沒有在您的XPath中定義名稱空間!嘗試'holder.setNodeValue(「// *:loginUserResponse [1]/*:loginUserResponse/*:userModel/*:auditModel/*:timestamp」,「1」)'。 – SiKing

+0

使用// *:元素名約定的xpath,然後使用groovy代碼「holder.updateProperty()」,然後將其寫入文件 –

回答

0

這是一個示例groovy腳本,它使用任意xml並基於特定條件更新元素值。然後它會根據請求將更新的數據寫回文件。請按照腳本的在線評論。

我相信這會幫助你理解,你將能夠將它應用到你的實際XML。

這個腳本實際上做了什麼?
當汽車名稱爲i30時,此xml對於madeBy的值不正確。並想用Hyundai更新xml並將其寫入指定的文件。

/** 
* below is the groovy script which read and parses xml 
* and updates its value and then writes back to file 
**/ 
import groovy.xml.* 
//Sample xml string 
def xml = '''<?xml version="1.0" encoding="utf-8"?> 
<cars> 
    <car> 
    <name>Jetta</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>Polo GT</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>i30</name> 
    <madeBy>Typo</madeBy> 
    </car> 
</cars>''' 
//if you want to pass the dynamic response instead of above fixed xml, then 
//use below statements by uncommenting below one and replace value for TEST_STEP_NAME and 
//comment above xml statement 
/** 
def xml = context.expand('${TEST_STEP_NAME#Response}') 
**/ 
//parse the xml string and create object 
def cars = new XmlSlurper().parseText(xml) 
//find the car whose name is i30 and update its madeBy element value to Hyundai 
cars.'**'.find { if (it.name == 'i30') it.madeBy = 'Hyundai'} 
//print changed cars object 
println XmlUtil.serialize(cars) 
//Serializes and Writes cars object into given file 
new File('c:/Temp/test1.xml').write(XmlUtil.serialize(cars)) 

如果你打開你的XML文件中,輸出應該如下圖所示:

<?xml version="1.0" encoding="UTF-8"?> 
<cars> 
    <car> 
    <name>Jetta</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>Polo GT</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>i30</name>   
    <madeBy>Hyundai</madeBy> 
    </car> 
</cars> 

您也可以找到this例如有用這說明乾脆創建一個新的XML。