Ask a Question

How to loop through results of individual test cases and recover testCase details

bucuali
Occasional Contributor

How to loop through results of individual test cases and recover testCase details

Hello everyone,

 

This will be my first post in the comunity and I've got to warn you, it's gonna be very oldscool

So here it goes. I recently "inherited an old SoapUI project which I am currently running in ReadyAPI and which need to modify.

 

I have a report generating script which is called from the teardown script of the other test cases via the following code:

 

testRunner.testCase.testSuite.project.testSuites["Library"].testCases["Reporting_Utility"].
testSteps["GenerateCSVReport"].run(testRunner, context);

 

On the other side, the report generate script is iterating through the test step results like so:

for(testCaseResult in runner.results())
{

def testSuite = testRunner.testCase.testSuite.name;
def testCase = testCaseResult.testCase.name //testRunner.testCase.name;
def testStep = stepResult.getTestStep();
def testStepName = testStep.name

reportFile.append('"' + testSuite + '",');
reportFile.append('"' + testCase + '",');

reportFile.append('"' + testStepName + '",');

reportFile.append('"' + status + '",' + "\n");

}

 

How can I loop through the results at test case level instead of the test step level?

I only need the overall fail/pass of each testcase.name + testsuite + status

Any help would be greatly appreciated

9 REPLIES 9
MConneely
Staff

As you have moved to ReadyAPI, could you take advantage of the Reporting features available instead of scripting it

 

There are a Preconfigured Report Styles, which include Data Export For Automation. This would give you a csv file with the test results for each test case.

https://support.smartbear.com/readyapi/docs/testing/reports/existing/export.html

bucuali
Occasional Contributor

Hello @MConneely ,

 

Thanks for replying to the question. I am aware of the functionality but unfortunately it's not an option for my use case. My full requirement is the following: This project runs in Jenkins, and it has to return a .csv report which is sent from the pipeline to another app, at the same time a .pdf version of this report is sent by mail along with the Allure report (both mandatory). Now, the script runs fine, but the .csv and .pdf versions are very long as it shows all the test steps (around 400) and I have to reduce it's size by showing only test case results. Also, the app processing the .csv report has already been modified to expect test case results and process them accordingly, so no turning back at this point..

 

Any ideas/resources on how to do this?

 

Thank you in advance for the help 🙂 

Hi bucuali,

 

ive provided some options here, hopefully they will assist.
 

In the Teardown Script tab of each Test Suite, you could have a version of the following
for ( testCaseResult in runner.results )
{
// Get each test cases name from the suite
testCaseName = testCaseResult.getTestCase().name

// Get each test cases result

testCaseStatus = testCaseResult.getStatus()

//log the information
log.info testCaseName + " :  " + testCaseStatus
}

 

If you wanted to move up a level and look at the results at a TestSuite level, you could put something at the Functional Test TearDown Script level
for ( testSuiteResult in runner.results )
{
log.info(testSuiteResult.getTestSuite().getLabel() + " : " + testSuiteResult.getStatus())
}

Some samples on our documentation should assist you
https://support.smartbear.com/readyapi/docs/testing/scripts/samples/index.html
https://support.smartbear.com/readyapi/docs/testing/scripts/samples/log.html 


 

 

bucuali
Occasional Contributor

Hello,

 

This is certainly going in the right direction, but I've hit a wall when trying to loop through each of the results in the test case creating the reports. I'm not sure what the best way to do it is, but something like:

for(testCaseName in testRunner.getResults())
{
             def testSuite = testRunner.testCase.testSuite.name;
             def testCase = testCaseResult.getTestCase().name
             def status = testCaseResult.getStatus()
             reportFile.append('"' + testSuite + '",');
             reportFile.append('"' + testCase + '",');
             reportFile.append('"' + status + '",' + "\n");

}

 

doesn't work. No errors, but no results either. Any Idea what I'm missing?

 

Many thanks again for all the help

Hi,

are you confident that you are getting the correct information from the test suite/case/result? Even outputting the data using log.info? Are you adding this to the Teardown script?

If so, is the issue now around the reportFile object not getting populated? Is it the reportFile object read-in CSV file?

 

 

bucuali
Occasional Contributor

Hi,

 

Actually I think that is where the issue is coming from. By putting the script in the teardown section I'm executing after all the test cases, including the testcase which is actually supposed to receive the info and create the report (located in a different testsuite dedicated to that purpose). Now this report test case is being called from the teardown script of every other individual test case, so the execution timeline logic doesn't work.

 

I'm including a snapshot of how the testsuites and the testcases are ordered for a better understanding

 

I'm still experimenting with different ideas, but none seem to work so far

 

Thanks again for the help 🙂

bucuali
Occasional Contributor

Happy New Year!

Any further thoughts on the matter?

 

Thank you in advance 🙂

Randall7205
New Member


@bucuali wrote:

Hello everyone,

 

This will be my first post in the comunity and I've got to warn you, it's gonna be very oldscool

So here it goes. I recently "inherited an old SoapUI project which I am currently running in ReadyAPI and which need to modify.

 

I have a report generating script which is called from the teardown script of the other test cases via the following code:

 

testRunner.testCase.testSuite.project.testSuites["Library"].testCases["Reporting_Utility"].
testSteps["GenerateCSVReport"].run(testRunner, context);

 

On the other side, the report generate script is iterating through the test step results like so:

for(testCaseResult in runner.results())
{

def testSuite = testRunner.testCase.testSuite.name;
def testCase = testCaseResult.testCase.name //testRunner.testCase.name;
def testStep = stepResult.getTestStep();
def testStepName = testStep.name

reportFile.append('"' + testSuite + '",');
reportFile.append('"' + testCase + '",');

reportFile.append('"' + testStepName + '",');

reportFile.append('"' + status + '",' + "\n");

}

 

How can I loop through the results at test case level instead of the test step level?

I only need the overall fail/pass of each testcase.name + testsuite + status

Any help would be greatly appreciated


If so, is the issue now around the reportFile object not getting populated? Is it the reportFile object read-in CSV file?

 

bucuali
Occasional Contributor

Hi @Randall7205 

 

Yes, that's the object. I's populated with individual test step data instead of overall test case (fail/pass) data.

cancel
Showing results for 
Search instead for 
Did you mean: