2016-09-16 2 views
-1

Ich nur verwendet SOAP UI, um nur die WSDL/URL zu testen, aber nicht in diesem Umfang. Ich muss die Request-URL-Abfrageparameter von der SOAP-UI abrufen und sie verwenden, um einige Sachen mit groovigem Skript zu testen.Abfrage params von Anfrage URL Soapui mit groovy

Können sagen, ich habe eine GetCustomers URL-Anfrage als

`http://myendpoint.com/customers?Id=111&ModeName=abc&DeltaId=023423` 

folgt folgende ich brauche die von URL Id=111 ModeName=abc DeltaId=023423

ich ein starkes Skript in SOAP UI erstellt die in der folgenden Hierarchie Testanzug-> Testfall-> Testschritt-> GroovyScript

Im groovy Skript habe ich versucht

def id = testRunner.testCase.getPropertyValue("Id")

aber wenn ich id drucken ich erhalte es als null. Ich bin nicht sicher von irgendwelchen anderen Konfigurationen, die ich tun muss, um auf diese Abfrageparameter zuzugreifen. Gibt es eine Möglichkeit, diese Abfrageparameter zu bekommen und auf diese direkt in meinem groovigen Skript zuzugreifen?

+0

Bevor Sie zu weit in Groovy bekommen, könnten Sie die Dokumentation lesen wollen: https: //www.soapui. org/Rest-Testing/Verständnis-Rest-Parameter.html – SiKing

Antwort

2

der Annahme, dass Ihr Testschritt Anfrage genannt wird GetCustomers Sie die folgen Groovy Code verwenden, können die Testschritt und dann die Eigenschaft mit dem Endpunkt Wert als String zu erhalten:

def ts = context.testCase.getTestStepByName('GetCustomers') 
def endpoint =ts.getPropertyValue('Endpoint') 
log.info endpoint // prints http://myendpoint.com/customers?Id=111&ModeName=abc&DeltaId=023423 

Dann können Sie Analysieren Sie den Endpunkt mit der Klasse java.net.URL und verwenden Sie die Methode getQuery(), um die Abfrageparameter zu extrahieren. Dann teilen Sie sich durch &, um jedes Abfrage-Name-Wert-Paar zu erhalten und schließlich jedes Paar erneut mit = zu teilen und das Ergebnis in eine Map. Insgesamt könnte der Code so etwas wie sein:

import java.net.* 

def ts = context.testCase.getTestStepByName('GetCustomers') 
def endpoint =ts.getPropertyValue('Endpoint') 
// parse the endpoint as url 
def url = new URL(endpoint) 
// get all query params as list 
def queryParams = url.query?.split('&') // safe operator for urls without query params 
// transform the params list to a Map spliting 
// each query param 
def mapParams = queryParams.collectEntries { param -> param.split('=').collect { URLDecoder.decode(it) }} 
// assert the expected values 
assert mapParams['Id'] == '111' 
assert mapParams['ModeName']== 'abc' 
assert mapParams['DeltaId']=='023423' 

Es gibt eine andere Option ist URL Klasse ohne Verwendung; das darin besteht, einfach auf die URL? mit einer Aufteilung der Abfrageparameter zu erhalten (wie URL.getQuery() tut):

def ts = context.testCase.getTestStepByName('GetCustomers') 
def endpoint =ts.getPropertyValue('Endpoint') 

// ? it's a special regex... so escape it 
def queryParams = endpoint.split('\\?')[1].split('&') 
// transform the params list to a Map spliting 
// each query param 
def mapParams = queryParams.collectEntries { param -> param.split('=').collect { it }} 
// assert the expected values 
assert mapParams['Id'] == '111' 
assert mapParams['ModeName']== 'abc' 
assert mapParams['DeltaId']=='023423' 
Verwandte Themen