Marek Masek
Marek Masek

Reputation: 45

Transfer list between Groovy test steps (SoapUI)

I have one test case which is called (started and finished) before every run of other test cases. It is something like 'test data preparation' test case. Output from this test case is list with some elements, list looks like this:

def list = ['Login', 'Get Messages', 'Logout', etc.]

List is different on every run. I need to transfer this list from 'test data preparation' test case to other test cases. Transfer will be between two Groovy scripts.

How to transfer list between two Groovy test steps in SoapUI?

Upvotes: 0

Views: 563

Answers (2)

A.Joly
A.Joly

Reputation: 2387

from groovy step 1 you shall return the list:

def list = ['Login', 'Get Messages', 'Logout']
return list

from groovy step 2 you can get this returned list

def result = context.expand( '${Groovy Script 1#result}' )

list = result.tokenize('[,] ')

list.each{
    log.info it
}

note that you get a string that you have to convert back to a list (tokenize).

I did this with SOAPUI pro. Another way (ugly) would be to store the list in a custom property in groovy script 1 (using testRunner.testCase.setPropertyValue("myList",list.toString()) and to recover it in groovy step 2 (testRunner.testCase.getPropertyValue("myList")

I hope that will help

EDIT : if list elements contain spaces

this is not very clean and I hope someone will help to provide something better but you can do the following :

list = "['Login - v1', 'Get Messages - v2', 'Logout - v1']"
list =  list.replace('\'','\"')

def jsonSlurper = new groovy.json.JsonSlurper()
list = jsonSlurper.parseText(list) 

list.each{
    log.info it
}

Alex

Upvotes: 1

Steen
Steen

Reputation: 873

As I understand it:

  • You have one TestCase, which you call from every other TestCase.
  • I assume this is done using a "Run TestCase" teststep?
  • You would like to be able to pass a list of strings
  • As I read it, parameters go one way. From the "external testcase" and back to the calling testcase. There is no "input" from each testcase to this "external testcase"?

The Groovy Script in your "external testcase" may then generate a String result, which in turn can be converted to something like an Array or ArrayList of Strings. This could be a string with values separated by ;

def result = ""
result += "Entry1;"
result += "Entry2;"
result += "Entry3;"
// You may want to add a line of code that removes the last ;
return result

This result will then be easily retrieved from Groovy Scripts elsewhere, by adding a few lines of code.

If the Groovy Script is placed in another TestCase, but in the same TestSuite, you may retrieve the result using:

def input = testRunner.testCase.testSuite.getTestCaseByName("Name of TestCase").getTestStepByName("Groovy Script Name").getPropertyValue("result")

If it is placed in a TestCase in a different TestSuite, you may use:

def input = testRunner.testCase.testSuite.project.getTestSuiteByName("Test Suite Name").getTestCaseByName("Test Case Name").getTestStepByName("Groovy Script Name").getPropertyValue("result")

and then loop over the input doing something like:

for (def s : input.split(";")) {
    log.info s
    // Do your stuff here
}

I hope that makes sense...? :)

Upvotes: 1

Related Questions