2016-03-01 36 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

非常感謝你,我的作品 –

相關問題