Project |__Datasource |__request |__groovy_code |__DatasourceLoop
当我运行我的项目时,它会执行100个请求而不会出错。 groovy_code只保存第一个id。
我想要的是为每个请求保存id,所以在项目级别的不同变量中有100个ID
这是我的groovy_code:
import groovy.json.JsonSlurper
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)
log.info result.data.id
testRunner.testCase.testSuite.project.setPropertyValue("token_id", result.data.id)
感谢您的帮助
答案 0 :(得分:2)
我从不使用SOAPUI PRO,但我无法访问datasource testStep
甚至datasource loop
。
然而,基于您展示的项目结构,我认为每次datasource loop
在datasource
中创建一个元素时,它会将流发送到请求步骤,因此每次迭代都会执行请求和常规步骤;由于这个原因,我认为问题在于每次使用新值时,你的groovy代码都会覆盖相同的属性。
然后要解决此问题,您可以尝试在属性名称中添加一些变量后缀,以避免每次属性值都重写。例如,您可以将token_id
字符串添加到计数器,某些uuid,当前ms等
例如,您可以使用计数器作为后缀。要保留计数器值,您需要将其保存在context
变量中,这样在当前执行中的测试之间共享此属性:
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)