问题
I only used SOAP UI to just test the WSDL/URL but not in this extent. I need to get the request url query parameters from SOAP UI and use them to test some stuff using groovy script.
Lets say i have a GetCustomers request url as follows
`http://myendpoint.com/customers?Id=111&ModeName=abc&DeltaId=023423`
i need the following from URL
Id=111
ModeName=abc
DeltaId=023423
I created a groovy script in SOAP UI which in the following hierarchy TestSuit->TestCase-> TestStep->GroovyScript
In the groovy script i tried
def id = testRunner.testCase.getPropertyValue("Id")
but when i print id
i am getting it as null. I am not sure of any other configurations i need to do in order to access those query params.
Is there a way I can get those query params and access those directly in my groovy script?
回答1:
Supposing that your testStep request is called GetCustomers
you can use the follow Groovy code to get the testStep and then the property with the endpoint value as String
:
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
Then you can parse the endpoint using the java.net.URL class and use getQuery() method to extract the query parameters. Then split by &
to get each query name value pair and finally split again each pair with =
and put the result in a Map
. Altogether your code could be something like:
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'
There is another option without using URL
class; which simply consists on splitting the URL
using ?
to get the query parameters (as URL.getQuery()
does):
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'
来源:https://stackoverflow.com/questions/39535861/get-query-params-from-request-url-soapui-using-groovy