Creating a Data Driven Test Suite in Katalon Studio

In order to extend the reach of my regression tests, I wanted to run a Test Suite multiple times for different users, one after the other. My goal is to log in as User A, run the regression suite, log in as User B, run the regression script again.

For example, I want to log in as John, check multiple pages worth of sales figures to perform calculations and comparisons. I then want to log in as Jane and do the same thing.

I currently have a Login script that I edit between each run with the name of the user I want to be. It works, but I want it to run for a list of users rather than me having to make an edit between each run.

Katalon supports Data Driven tests, where you can supply information to be read from a file. However, that applies to a single Test Case, not a Test Suite. It means the Test Case will iterate through all the data in the file before moving on to the next Test Case in the list.

Based on the scenario above, it would log in for User A, then immediately log in for User B, then User C, and continue do this for each name in the file. At the end of the list, the next test in the suite would be executed. It would read the sales data for the last person in the list.

What I need is for the data to be applied at the Suite level, which isn’t currently supported. However, there is a way to make this work that only takes a couple of steps. In essence, the Login script call numerous Test Cases after reading in the name of the user. It’s not quite as drag and drop as building a Test Suite, but it works.

To convert my Test Suite to work in my Test Case I took the following steps. Since the Test Suite is an XML file it can be easily read. Using a Terminal session and grep, I grabbed all the <testCaseId> lines and wrote them to a file.

grep "Test Cases" QA\ Regression\ Test.ts > testcases.txt

I now have a list of all my tests in the form:

<testCaseId>Test Cases/Sales Dashboard Tests/Main Dashboard Tests/Check Import Date</testCaseId>

The next step is open the testcases.txt file into an editor or spreadsheet such as LibreOffice. Using the Search and Replace function, strip out the <testCaseId> and </testCaseId> tags. This is now the list of Test Cases we want to run and will be added to the Login script.

From here, it’s easy to combine the callTestCase function and append the name of all the test cases to it.

In a spreadsheet, paste all the Test Cases into Column A.

In Column B enter:

WebUI.callTestCase(findTestCase('

In Column C, enter:

'), [:], FailureHandling.CONTINUE_ON_FAILURE)

In Column D, enter

=B1&A1&C1

This takes the callTestCase command, appends the name of the actual test case, then appends the closing syntax. This generates:

WebUI.callTestCase(findTestCase('Test Cases/Sales Dashboard Tests/Main Dashboard Tests/Check Import Date'), [:], FailureHandling.CONTINUE_ON_FAILURE)

Fill this formula down for each Test Case.

With all the commands complete, copy the entire list into the Test Case you want to iterate through, in my case, Login.

The final test case will look similar to:

WebUI.navigateToUrl(GlobalVariable.baseurl + '/login')
WebUI.setText(findTestObject('Page_/input_login_Field'), impersonateUser)
WebUI.delay(1)
WebUI.click(findTestObject('Page_/btn_Submit-Login-Credentials'))
WebUI.delay(1)
WebUI.callTestCase(findTestCase('Test Cases/Sales Dashboard Tests/Main Dashboard Tests/Check Import Date'), [:], FailureHandling.CONTINUE_ON_FAILURE)
WebUI.callTestCase(findTestCase('Test Cases/Sales Dashboard Tests/Main Dashboard Tests/Confirm Dashboard Link'), [:], FailureHandling.CONTINUE_ON_FAILURE)

I have 50 callTestCase commands, the full list of my Test Suite, in the Login Test Case. This means my new Test Suite only has 2 Test Cases listed. The first is to load the web page details. The second is the Login test. Login now replaces the previous Test Suite.

When I run this new test, it gets to the Login script, loads a user, then executes 50 regressions tests. When that cycle is complete, it loads the next user and repeats the process.

Also note the FailureHandling.CONTINUE_ON_FAILURE that has been added to each Test Case. This means the regression tests will keep running if one of them fails. Without this, as soon as an error condition is reached, all the tests will be halted. This includes an element missing, the markFailed command and quite a few others.

While not quite as robust as a regular Test Suite, this method works and will allow a series of tests to be run multiple times. It took less than 10 minutes to convert my Test Suite to this method and get it working. For now, it’s a pretty reasonable workaround.

Other articles of interest:

Leave a Reply

Your email address will not be published. Required fields are marked *

Recent Comments
  • How To Disable the Quicken Registration Prompt (21)
    • Susan Long: I bought my quicken disc in the beginning and it came with a registration number. I rang the helpline and they gave me the code to put in and talked me through it. It you downloaded your version then you don’t own it...
    • Peter: You might consider running your old version of Quicken on an ancient computer. This is what I have done for years. The newer versions are fraught with problems- criminal, in my opinion. One version made mathmatical errors when...
    • Roslyn Chamberlain: Can I stop the countdown in quicken 2001 says only 8 sessions left. and what will happen after?
  • What is Katalon Studio? A Distro of Selenium, Groovy and Eclipse (1)
    • Mahesh: Looking for more posts on katalon studio.your katalon stuffs are always exiting
  • Simple wildcard searches for pattern matching (2)
    • Don Pedro: For that scenario it seems .contains would be your choice. For example, variable.contains(‘amazo n.com’) to see if the url had amazon.com. In that case, www.amazon.com, forum.amazon.com, retail.amazon.com would all...
    • Jony: Hi, How can I use a wild card to assert a URL is the one I want. I just want to verify the domain ==expected but not anything after it. Tried * but not working and only works when I have full URL.
  • Create a Dynamic Object at Runtime (2)
    • Saish: How to add shadow root parent to this runtime object..
    • Jeremy Brien: I appreciate this! I saw this post on LinkedIn this morning and was able to find a use case for it! I found that defining my xpath with an iterable variable allows me to loop through and capture text from tables created...
  • Output status messages and test information by writing to the Log File Viewer in Katalon Studio (2)
    • Don Pedro: That would be things like: log.logWarning(‘The import date listed on the site is: ‘ + importDate) log.logWarning(‘The value from the site is: ‘ + salesFigure) log.logWarning(‘Filter Results for ‘ +...
    • Prashant Pednekar: Thanks for the informative article but can we also put some variable values to make it more exciting.
  • Setting up a repeatable Search Method in Katalon Studio (1)
    • RJ: Thanks a lot! This is very helpful 🙂
  • Filling forms with random numbers in Katalon Studio (3)
    • Patrick Clough: We created a handy random string generator custom keyword. The method takes in a string for the type of string you want, and an integer for the length. Looks like this: static String RANDOM_ALPHANUM =...
    • Don Pedro: randomNumber is the variable that holds the result of generating a new random number. Depending on how things work on your site, you might need to convert the number to a String before it’s recognized correctly....
    • Seth: When you are setting up randomNumber is this a new keyword or a new variable? I am trying to randomly generate unique socials and can’t seem to connect my generator to my Set Text.
  • Working with Dates and Date Formatting in Katalon Studio (5)
    • Ann: THANK YOU ! That worked perfectly !