如何使用groovy从响应保存id?

如何使用groovy从响应保存id?,groovy,soapui,Groovy,Soapui,在soapui中,我的项目是: Project |__Datasource |__request |__groovy_code |__DatasourceLoop 感谢您的帮助我从未使用过SOAPUI PRO,而且我无权访问数据源测试步骤甚至数据源循环 然而,根据您展示的项目结构,我假设每次数据源循环在数据源中找到一个元素时,它都会将流发送到请求步骤,因此每次迭代都会执行请求和groovy步骤;因此,我认为问题在于groovy代码每次都用新值重写相同的属性 然后,为了解决

在soapui中,我的项目是:

Project |__Datasource |__request |__groovy_code |__DatasourceLoop
感谢您的帮助

我从未使用过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)