cancel
Showing results for 
Search instead for 
Did you mean: 

Groovy Automated DataSource Loopers

Highlighted
Contributor

Groovy Automated DataSource Loopers

I understand that this is a SoapUI Pro forum but I think creating the loop steps through groovy manually can be a good lesson and can help you customise your loops to your heart (and/or requirement)'s content!

 

So without further ado this is how I script my groovy loopers Smiley Happy

NOTE: in this example I am connecting to an OracleDB to fuel my requests.

 

 

1) Structure:

The structure within my test case is quite simple: loopStarter to connect to the db/initialise the data - storing the current information into properties, response to send these properties off to the API through a request, loopEnder to either propagate or exit the loop if the condition is met.

loop structureloop structure

 

 

2) loopStarter

Connection to/creation of your data source, be it a database, excel etc

In this example I will be using the groovy.sql class (documentation) to connect to my db, and store the results into properties

import groovy.sql.Sql

sql = Sql.newInstance(<connection details>)
def res = sql.rows(<sql query>)
def loopProperties = testRunner.testCase.getTestStepByName("loopProperties")

//will initialise count in the loopProperties step if count does not yet exist if(!loopProperties.hasProperty("count")){ loopProperties.setPropertyValue("count","0") } def count = Integer.parseInt(loopProperties.getPropertyValue("count"))
//store the properties from the current result loopProperties.setPropertyValue("x",res[count].x) loopProperties.setPropertyValue("y",res[count].y) loopProperties.setPropertyValue("querySize",(String)res.size()) sql.close()

sql.rows returns an array of ArrayLists, so to access the current result (more on this later) we will use res[count]. Just to reiterate this step ONLY sets the properties to be sent off in the request. querySize is set so we can continue looping over all the results from the query.

 

 

3) response

To then call your properties into your request step we will do this:

<soapenv:Envelope namespace:ns="namespace">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:x>${loopProperties#x}</ns:x>
      <ns:y>${loopProperties#y}</ns:y>
   </soapenv:Body>
</soapenv:Envelope>

if you choose not to store your properties in a property step and wanted to store them at the test case level you can fetch them like so:

...
      <ns:x>${#TestCase#x}</ns:x>
...

 

 

4) loopEnder

This is the loop exit condition. It will tell the loop whether or not there are more results from your query to send through the request. This is also a pretty simple step: 

- check count vs querySize

- increment count if true

- go to loopStarter if true, to update the properties (count has been increased and because of this, so will the current result)

def loopProperties = testRunner.testCase.getTestStepByName("loopProperties")
def count = Integer.parseInt(loopProperties.getPropertyValue("count"))
def querySize = Integer.parseInt(loopProperties.getPropertyValue("querySize"))

if( count<querySize-1 ){
   count = count+1
   loopProperties.setPropertyValue("count", (String)count)
   testRunner.gotoStepByName("loopStarter")
}

 

 

5) reset count

Unnecessary step but I like getting into the habbit of clearing all properties after I'm done, and this groovy script will do it for you

def loopProperties = testRunner.testCase.getTestStepByName("loopProperties")
String[] removals = loopProperties.getPropertyNames()

for(i=0;i<removals.size();i++){
   loopProperties.removeProperty(removals[i])
}

I've been thinking of doing something similar to this for the Excel DataSource script @Olga_T mentioned, well similar to the loopStarter step anyway - doing it completely through groovy so SoapUI free users can do it too, I just need to look into parsing exel files with groovy.

 

Anyways I hope this helps you all,

Mo

If my answer helped you out, please consider leaving kudos and/or accepting as a solution.
Have an awesome day!
Tags (1)
4 REPLIES 4
Highlighted
Frequent Contributor

Re: Groovy Automated DataSource Loopers

Well explained. An excellent post for someone looking into automation with datasources.

Highlighted
Super Contributor

Re: Groovy Automated DataSource Loopers

I have already done parsing of groovy using excel 

Look into apache POI

 

Highlighted
Contributor

Re: Groovy Automated DataSource Loopers

Yeah that's what I'm currently reading into
If my answer helped you out, please consider leaving kudos and/or accepting as a solution.
Have an awesome day!
Highlighted
Moderator

Re: Groovy Automated DataSource Loopers

Hi all,

 

Great how to, Mo! Thank you for sharing.

I have added the TechCorner label to it, which gives you 2 points for this topic in our  API Summer 2018 challenge Smiley Wink

 

 


Olga Terentieva
SmartBear Assistant Community Manager

New Here?
Join us and watch the welcome video:
Announcements
TechCorner Leaderboard
Compete with community members in the TechCorner Challenge and get into the Leaderboard!

Rank Participant Points Earned
1 msiadak 12
2 nmrao 8
3 HimanshuTayal 3
Top Kudoed Authors