使用groovy从请求url soapui获取查询参数

时间:2016-09-16 16:06:20

标签: rest groovy soapui

我只使用SOAP UI来测试WSDL / URL,但不是在这个范围内。我需要从SOAP UI获取请求url查询参数,并使用它们使用groovy脚本测试一些东西。

假设我有一个GetCustomers请求网址如下

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

我需要以下网址 Id=111 ModeName=abc DeltaId=023423

我在SOAP UI中创建了一个groovy脚本,该脚本位于以下层次结构中   TestSuit-> TestCase-> TestStep-> GroovyScript

在我试过的groovy脚本中

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

但是当我打印id时,我将其视为空。我不确定我需要做什么其他配置才能访问这些查询参数。 有没有办法可以获取这些查询参数并直接在我的groovy脚本中访问它们?

1 个答案:

答案 0 :(得分: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'