2016-03-01 35 views
0

在SOAPUI我的项目是:如何使用响应中的groovy保存ID?

 
Project 
    |__Datasource 
    |__request 
    |__groovy_code 
    |__DatasourceLoop 
  • 我的数据源中包含100行,每一个具有不同参数的请求。
  • 我的groovy_code保存请求响应的ID。

当我运行我的项目时,它执行100个请求没有错误。 groovy_code只保存第一个ID。

我要的是保存ID为每个请求,在不同的变量,因此100 IDS项目一级

这里是我的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) 

谢谢您的帮助

回答

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) 
+0

非常感谢你,我的作品 –

相关问题