我只使用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脚本中访问它们?
答案 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'