2016-05-31 7 views
0

Ich bin völlig neu in Groovy und SOAPUI.Wie update Antwort xml mit groovy und drucken Sie es

Szenario:. Vergleichen Sie zwei XML-Antwort (beide gehören zu verschiedenen Projekt)

Methode versucht: Nehmen Sie die Antwort und schreiben Sie die Antwort auf eine Datei, zu vergleichen, sowohl die Dateien.

Problem konfrontiert: Zeitstempel Mismatch, da beide Anfrage zu verschiedenen Zeiten laufen

Aufgrund der obigen Frage, die ich versuchte, den Knoten Wert der Zeitstempel zu erhalten und sie ändern * sowohl für die Antworten. Aber ich kann den geänderten Antwortwert nicht schreiben.

Groovy Skript:

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"); 

Zunächst def holder hält die Antwort xml, aber nach dem xml in Halter bekommen, ich bin Aktualisierung der Knotenwert. Ich bin mir nicht sicher, wie ich weiter vorgehen soll. Ich muss das aktualisierte XML in eine Datei schreiben.

+0

Was ist der Fehler, den Sie sehen? Stacktrace bitte? – Rao

+0

Sie haben Namespaces in Ihrem XPath nicht definiert! Versuchen Sie 'holder.setNodeValue (" * *: loginUserResponse [1]/*: loginUserResponse/*: userModel/*: auditModel/*: Zeitstempel "," 1 ")' '. – SiKing

+0

benutze // *: elementName Konvention für den XPath und benutze dann den groovigen Code "holder.updateProperty()" und schreibe ihn dann in eine Datei –

Antwort

0

Hier ist ein Beispiel für ein grooviges Skript, das ein beliebiges XML verwendet und einen Elementwert basierend auf bestimmten Bedingungen aktualisiert. Dann schreibt es die aktualisierten Daten wie angefordert in eine Datei zurück. Bitte folgen Sie den Inline-Kommentaren des Skripts.

Und ich glaube, dass dies hilft Ihnen zu verstehen und Sie können es auf Ihre tatsächlichen XML anwenden.

Was macht dieses Skript eigentlich?
Dieser XML-Code hat einen falschen Wert für madeBy, wenn der Name des Autos i30 ist. Und ich möchte XML mit Hyundai aktualisieren und in die angegebene Datei schreiben.

/** 
* 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)) 

Wenn Sie Ihre XML-Datei öffnen, die Ausgang wie unten werden soll gezeigt:

<?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> 

Sie auch this Beispiel nützlich, die insgesamt eine neue XML erstellen zeigt finden.

Verwandte Themen