如何使用groovy从响应保存id?
在soapui中,我的项目是: Project |__Datasource |__request |__groovy_code |__DatasourceLoop如何使用groovy从响应保存id?,groovy,soapui,Groovy,Soapui,在soapui中,我的项目是: Project |__Datasource |__request |__groovy_code |__DatasourceLoop 感谢您的帮助我从未使用过SOAPUI PRO,而且我无权访问数据源测试步骤甚至数据源循环 然而,根据您展示的项目结构,我假设每次数据源循环在数据源中找到一个元素时,它都会将流发送到请求步骤,因此每次迭代都会执行请求和groovy步骤;因此,我认为问题在于groovy代码每次都用新值重写相同的属性 然后,为了解决
感谢您的帮助我从未使用过SOAPUI PRO,而且我无权访问
数据源测试步骤
甚至数据源循环
然而,根据您展示的项目结构,我假设每次数据源循环
在数据源
中找到一个元素时,它都会将流发送到请求步骤,因此每次迭代都会执行请求和groovy步骤;因此,我认为问题在于groovy代码每次都用新值重写相同的属性
然后,为了解决这个问题,您可以尝试在属性名称中添加一些变量后缀,以避免每次属性值被重写。例如,您可以将计数器、一些uuid、当前ms等添加到token\u id
字符串中
例如,您可以使用计数器作为后缀。要保留计数器值,您必须将其保存在上下文变量中,通过这种方式在当前执行中的测试之间共享此属性:
import groovy.json.JsonSlurper
// create a suffix function to generate
// the suffixs for your property names based on a count
def getSuffixNameProperty = {
// check if already exists
if(context['count']){
// if exists simply add 1
context['count']++
}else{
// if not exists initialize the counter
context['count'] = 1
}
return context['count']
}
def propertyName = "token_id" + getSuffixNameProperty();
def response = context.expand( '${login#Response#declare namespace ns1=\'https://elsian/ns/20110518\'; //ns1:login_resp[1]/ns1:item[1]/ns1:response[1]}' )
def slurper = new JsonSlurper()
def result = slurper.parseText(response)
testRunner.testCase.testSuite.project.setPropertyValue(propertyName, result.data.id)
我从不使用SOAPUI PRO,而且我没有访问datasource testStep
甚至datasource loop
的权限
然而,根据您展示的项目结构,我假设每次数据源循环
在数据源
中找到一个元素时,它都会将流发送到请求步骤,因此每次迭代都会执行请求和groovy步骤;因此,我认为问题在于groovy代码每次都用新值重写相同的属性
然后,为了解决这个问题,您可以尝试在属性名称中添加一些变量后缀,以避免每次属性值被重写。例如,您可以将计数器、一些uuid、当前ms等添加到token\u id
字符串中
例如,您可以使用计数器作为后缀。要保留计数器值,您必须将其保存在上下文变量中,通过这种方式在当前执行中的测试之间共享此属性:
import groovy.json.JsonSlurper
// create a suffix function to generate
// the suffixs for your property names based on a count
def getSuffixNameProperty = {
// check if already exists
if(context['count']){
// if exists simply add 1
context['count']++
}else{
// if not exists initialize the counter
context['count'] = 1
}
return context['count']
}
def propertyName = "token_id" + getSuffixNameProperty();
def response = context.expand( '${login#Response#declare namespace ns1=\'https://elsian/ns/20110518\'; //ns1:login_resp[1]/ns1:item[1]/ns1:response[1]}' )
def slurper = new JsonSlurper()
def result = slurper.parseText(response)
testRunner.testCase.testSuite.project.setPropertyValue(propertyName, result.data.id)