2016-09-16 7 views
-1

Я использовал только пользовательский интерфейс SOAP, чтобы просто проверить WSDL/URL, но не в такой степени. Мне нужно получить параметры запроса url запроса из SOAP UI и использовать их для тестирования некоторых вещей с использованием groovy-скрипта.получить параметры запроса из запроса url soapui с использованием groovy

Допустим, у меня есть URL запроса GetCustomers следующим

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

мне нужно следующее из URL Id=111 ModeName=abc DeltaId=023423

Я создал заводной сценарий в SOAP UI, который в следующей иерархии TestSuit-> TestCase-> TestStep-> GroovyScript

В заводной сценарии я пытался

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

но когда я напечатать id я получаю нулевой. Я не уверен в каких-либо других конфигурациях, которые мне нужно сделать для доступа к этим параметрам запроса. Есть ли способ получить эти параметры запроса и получить доступ к ним прямо в моем оригинальном скрипте?

+0

Перед тем, как углубиться в Groovy, вы можете прочитать в документации: https: //www.soapui. орг/отдых тестирование/понимание, остальное-parameters.html – SiKing

ответ

2

Предположив, что ваш testStep запрос называется GetCustomers вы можете использовать следовать Groovy код, чтобы получить testStep, а затем свойство со значением конечной точки, как 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 

Тогда вы можете проанализируйте конечную точку с помощью класса java.net.URL и используйте метод getQuery() для извлечения параметров запроса. Затем разделите на &, чтобы получить каждую пару значений имени запроса и, наконец, разделить каждую пару с = и поместить результат в Map. Всего ваш код может быть что-то вроде:

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' 

Там есть еще один вариант без использования URL класса; которая состоит просто на расщепление URL с помощью ?, чтобы получить параметры запроса (как URL.getQuery() делает):

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' 
Смежные вопросы