2016-09-28 2 views
1

Mein Anwendungsfall ist, dass ich eine Massenaktualisierung von Anfragekörpern in mehreren SoapUI-Projekten durchführen möchte.Wie verschachtelte Parameter in SoapUI context.expand Ausdruck zu verwenden?

Beispiel für einen Anfragetext.

{ 
"name": "${#TestSuite#NameProperty}" 
"id": "${#TestSuite#IdProperty}" 
} 

Ich möchte die Eigenschaft $ {# # NameProperty Testsuite} durch Groovy, erweitern und den Wert erhalten bei Testsuite Ebene gespeichert dann nach Bedarf ändern.

Angenommen, ich habe 50 Testschritte in meinem Testfall und ich möchte die Anfrage für jeden von Groovy Skript erweitern. Um eine bestimmte Testschritte zu erweitern, würde ich den Namen der Testschritte übergeben. Zum Beispiel:

expandedProperty = context.expand('${testStep1#Request}') 

Aber, wie kann ich das gleiche erreichen, wenn ich alle 50 Testschritte zu durchlaufen will? Ich habe versucht, einen verschachtelten Parameter innerhalb des context.expand-Ausdrucks zu verwenden, aber es hat nicht funktioniert. Zum Beispiel:

currentTestStepName = "TestStep1" 
expandedProperty = context.expand('${${currentTestStepName}#Request}') 

Dies ergab mir nur die erweiterte Anfrage von dem Testschritt direkt darüber (wo ich das groovy Skript leitete aus) anstelle dem „TestStep1“ Schritt. (Was ist Wahnsinn!)

Auch context.expand scheint nur zu funktionieren, während über Groovy Skript aus dem SoapUI Arbeitsbereich Projekt ausgeführt wird. Gibt es eine andere Möglichkeit oder eine ähnliche Methode wie context.expand, die Eigenschaften wie "$ {# TestSuite # NameProperty}" während der kopflosen Ausführung erweitern kann? ZB: Eine groovy kompilierte JAR-Datei, die in SoapUI importiert wurde.

Vielen Dank für jede Hilfe im Voraus!

+0

Ein Weg, den ich herausgefunden habe, ist, indem ich eine Zeichenfolge konstruiere, die den tatsächlichen Namen des Testschritts ergibt, und es hat funktioniert. Aber ich hatte gehofft, es könnte einen einfacheren Weg geben. Beispiel: ** string = "\ $" + "{Testschritt1 # Anfrage}" ** und dann den String erweitern ** context.expand (string) ** – Dighate

+0

Was ist Ihr Anwendungsfall? Willst du einfach alle Anfragen des Tests an einige wo schreiben? Ist grooviges Skript im selben Testfall? – Rao

+0

Aktualisiert meinen Anwendungsfall in der ursprünglichen Frage. – Dighate

Antwort

2

Sie können context.expand('${${currentTestStepName}#Request}') Weg verwenden, um es zu bekommen.

Es gibt auch andere Ansätze, die context.expand nicht verwenden.

Um einzelne Prüfschritt Anfrage von einem bestimmten Testschritt zu erhalten:

Hier Benutzer geht Schritt Namen der Variablen stepName.

log.info context.testCase.testSteps[stepName].getPropertyValue('Request') 

Wenn Sie alle Anforderungen des Testfalls erhalten möchten, hier ist der einfache Weg mit dem folgenden Skript.

/** 
* This script loops thru the tests steps of SOAP Request steps, 
* Adds the step name, and request to a map. 
* So, that one can query the map to get the request using step name any time later. 
*/ 
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep 
def requestsMap = [:] 
context.testCase.testStepList.each { step -> 
    log.info "Looking into soap request step: ${step.name}" 
    if (step instanceof WsdlTestRequestStep) { 
     log.info "Found a request step of required type " 
     requestsMap[step.name] = context.expand(step.getPropertyValue('Request')) 
    } 
} 
log.info requestsMap['TestStep1'] 

Update: Wenn der Schritt, die Sie interessiert sind, ist REST Schritt, unter Bedingung anstelle von WsdlTestRequestStep in der oben.

if (step instanceof com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep) { //do the stuff } 
+0

Ich habe versucht, getPropertyValue ('Request') zu verwenden, aber es gibt den eigentlichen String zurück, einschließlich "$ {# TestSuite # NameProperty}".Ich möchte jedoch den tatsächlichen Wert in "$ {# TestSuite # NameProperty}", weshalb ich versucht habe, context.expand zu verwenden. – Dighate

+0

Warum möchten Sie den Wert '$ {# TestSuite # NameProperty}' 'ersetzen, ändern Sie stattdessen den Eigenschaftswert. – Rao

+0

Das Bulk-Update-Dienstprogramm, an dem ich gerade arbeite, beinhaltet die Konvertierung einer JSON-Anfrage in eine neue, die eine andere Struktur hat. Außerdem kann ich die Eigenschaft nicht ändern, da ich vor der Aktualisierung der Eigenschaft einige Erfüllungsbedingungen überprüfen muss. – Dighate

Verwandte Themen