2017-11-22 2 views
1

Ich habe zwei Testschritte in SoapUI.groovy Skript Schritt und SOAP Anfrage Schritt. Dies ist, wie Wunsch des Körpers wie folgt aussieht:Erhalten Sie XML-Kind-Knoten automatisch in SoapUI Groovy Script

<int:user> 
    <name>James</name> 
    <surname>Brown</surname> 
    <age>100</age> 
    <status>active </status> 
</int:User> 

ich eine Zeichenfolge in groovy Skript erstellt werden soll, der alle Knoten des Körpers (in diesem Beispiel str = "namesurnameagestatus") enthalten wird; und eine Zeichenkette mit Werten der Attribute; (in diesem Beispiel str = "JamesBrown100active"); Ich muss die erste Zeichenfolge manuell erstellen. Für zweite String Ich benutze diese:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) 
    def holder = groovyUtils.getXmlHolder(step.getPropertyValue("request")) 
    holder.getNodeValue("//name"); //for the name attribute 

usw.

Ich möchte innerhalb einer Schleife diese proccess automatisch tun.

zum Beispiel:

object = Get Node Values of Body 
count = object.size(); 
// some loop 
for(count times){ 
    object.get(i). get value; 
    //other code 
} 

Etwas Ähnliches. Irgendwelche Lösungen? Ich habe mich in andere Lösungen vertieft, konnte aber keinen korrekten Code/Verhalten finden.

+2

So verwirrend Ihre Frage können Sie es bitte vereinfachen Was die Verwendung Fall ist, was Sie zu erreichen versuchen – Rao

+0

@Rao, wie es zu vereinfachen, möchte ich Knoten der bekommen.???? Körper der Anfrage automatisch. Versuchen Sie, die Werte aller Kindknoten als Array oder als Map oder a zu erhalten s etwas. Ich habe das herausgefunden [link] (https://www.soapui.org/scripting-properties/tipstricks.html#3-1-Iterate-nodes) .tried holder.getNodeValues ​​("// body") Methode, aber es gibt nur ein Null-Objekt zurück. –

Antwort

1

Mit Hilfe von Gaurav Khurana fand ich die Lösung.

wenn ich will alle Werte der Elemente in den Körper containter.I bekommen dies zu tun:

def gu=new com.eviware.soapui.support.GroovyUtils(context) 
    def res = context.expand('${First Step#request}') 
    //log.info res 
    def holder = gu.getXmlHolder(res) 
    def val=holder.getNodeValues("//soap:Body/*") 
    def allvalues="" 
    for(values in val) 
    { 
     allvalues=allvalues+values 
    } 
    log.info allvalues 

Die Art und Weise, die Namen für die Elemente (in diesem Fall „Vorname Nachname Alter Status“ zu erhalten tun die folowing:

def gal = holder.getDomNodes("//" + space + "/*"); 

    for (values in gal) { 
    log.info(values.getTagName()); 
    } 
2

Sieht aus wie Ihr Anwendungsfall ist, Sie werden alle Attribute wie Name, Vorname usw. und auch ihre Werte kombinieren.

Dann versuchen Sie zu überprüfen, ob tatsächlich = erwartet wird !!

Lässt die Probe xml

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <ConversionRateResponse xmlns="http://www.webserviceX.NET/"> 
     <name>James</name> 
    <surname>Brown</surname> 
    <age>100</age> 
    <status>active </status> 
     </ConversionRateResponse> 
    </soap:Body> 
</soap:Envelope> 

Das ist unter nehmen unten groovy Code alle Werte zusammen geben. Ersetzen Sie einfach den „ersten Schritt“ mit dem Namen Ihres Schrittes

def gu=new com.eviware.soapui.support.GroovyUtils(context) 
def res = context.expand('${First Step#response}') 
//log.info res 
def holder = gu.getXmlHolder(res) 
def val=holder.getNodeValues("//*[local-name()='ConversionRateResponse']/*") 
def allvalues="" 
for(values in val) 
{ 
    allvalues=allvalues+values 
} 
log.info allvalues 

Ausgabe des obigen Codes ist

Sat Nov 25 15:57:31 IST 2017:INFO:JamesBrown100active 

Sie bitte diese Anmerkung nicht der richtige Weg der Validierung als morgen sein, wenn das Attribut nicht übergeben oder optional ist, wird das Skript fehlschlagen.

+0

Danke für Ihre Antwort. Ich habe das gleiche versucht, aber das Problem ist, dass mein Ergebnis null ist. nach getNodeValues ​​ist die Größe des Arrays 0. –

+0

das Problem ist gelöst.Vielen Dank. Ich habe versucht, alle Knotenwerte aus Körpercontainer zu bekommen. Ich habe den Code für meine Anfrage geändert. Ich möchte alle Elemente von body, also def val = holder.getNodeValues ​​("// soap: Body/*") verwenden. –

+0

okiesWenn es half, können Sie die Antwort upvote :) –

Verwandte Themen