Contributions
Re: Teardown report getting wrong TC status
Actually I found the reason. Script was made on old version of ReadAPI/Soap where cases has status FAILED, now it should be FAIL so following line should be modified def getCaseResult(caseRunner, caseName) { log.info "Checking test case status ${caseName}" if ( caseRunner.status.toString() == 'FAIL' ){ log.error "Test case $caseName has failed"4 years agoPlace ReadyAPI QuestionsReadyAPI Questions1.4KViews0likes0CommentsTeardown report getting wrong TC status
Hi All, I am using ReadyAPI 3.0.0 writing automated tests that will be executed on free SoapUI 5.5. I used teardown script found online to make kind of report from test execution however it seems not working correctly. No matter what will be TCs and TestSuite result report always shows SUCCESS. I have not touched the logic of the script, only added properties in output. Could you please advise how to fix it? /** * * Below is the TearDown script for SoapUI Project level * Which create a custom report in a given file * Modify the variable "reportFileName" below * **/ //Modify the file as needed for report file //def reportFileName = '/tmp/abctestreport.txt' //Adding the below as user wants specific directory //Get the project path def dataFolder = new com.eviware.soapui.support.GroovyUtils(context).projectPath //Create today's date for storing response def today = new Date().format("yyyy-MM-dd") def filePrefix = "${dataFolder}/TestReports/${today}" as String def fileNamePart = new Date().format("yyyy-MM-dd'T'HH.mm.ss") //creating filename dynamically. def reportFileName = "${filePrefix}/TestReport.txt" as String //NOTE: Not required to edit beyond this point /** * This class holds the test case details **/ class TestCaseResultHolder { def log Map<String, String> properties = [:] boolean status def createProperties(testCase) { testCase.getPropertyNames().each { key -> properties[key] = testCase.getPropertyValue(key) } } def getCaseResult(caseRunner, caseName) { log.info "Checking test case status ${caseName}" if ( caseRunner.status.toString() == 'FAILED' ){ log.error "Test case $caseName has failed" for ( stepResult in caseRunner?.results ){ stepResult.messages.each() { msg -> log.info msg } } return false } else { log.info "${caseName} is passed" } true } def buildCaseResult(caseRunner, caseName) { status = getCaseResult(caseRunner, caseName) if (status) { createProperties(caseRunner.testCase) } } } /** * This class holds the test suite details **/ class SuiteResultsHolder { def log Map<String, TestCaseResultHolder> casaeResults = [:] int testCaseCount = 0 int passedCasesCount = 0 int failedCasesCount = 0 def buildSuiteResults(suiteRunner, suiteName){ log.info "Building results of test suite ${suiteName}" for ( caseRunner in suiteRunner?.results ) { def caseName = caseRunner.testCase.name testCaseCount++ def tcHolder = new TestCaseResultHolder(log: log) tcHolder.buildCaseResult(caseRunner, caseName) casaeResults[caseName] = tcHolder if (tcHolder.status) { passedCasesCount++ } else { failedCasesCount++ } } } def getStatus() { (0 < failedCasesCount) ? false : true } } /** * This class holds the project details **/ class ProjectResultsHolder { def log Map<String, SuiteResultsHolder> suiteResults = [:] int suiteCount = 0 int passedSuitecount = 0 int failedSuiteCount = 0 def buildProjectResults(projectRunner, projectName) { log.info "Building results of test project ${projectName}" for(suiteRunner in projectRunner?.results) { def suiteName = suiteRunner.testSuite.name suiteCount++ def suiteResultsHolder = new SuiteResultsHolder(log: log) suiteResultsHolder.buildSuiteResults(suiteRunner, suiteName) suiteResults[suiteName] = suiteResultsHolder if (suiteResultsHolder.status) { passedSuitecount++ } else { failedSuiteCount++ } } } def getStatus() { (0 < failedSuiteCount) ? false : true } } //Get the status string based on boolean def getResult(status){ status == true ? 'SUCCEED' : 'FAILED'} //Draws a line def drawLine(def letter = '=', def count = 70) { letter.multiply(count)} //Gets the summary report def getSummaryReport(project, projectResultHolder) { def report = new StringBuffer() report.append(drawLine()).append('\n') report.append("\t\t\tTest Execution Summary\n") report.append(drawLine('-', 70)).append('\n') report.append("Project : ${project.name}\n") report.append("Result : ${getResult(projectResultHolder.status)}\n") report.append("Total test suites executed: ${projectResultHolder.suiteCount}\n") report.append("Test suites passed: ${projectResultHolder.passedSuitecount}\n") report.append("Test suites failed: ${projectResultHolder.failedSuiteCount}\n") report.append(drawLine()).append('\n') report } //Gets the test case report def getTestCaseReport(testCaseReport) { def report = new StringBuffer() report.append(drawLine('-', 70)).append('\n') report.append("\t\tTest Case Details:\n") report.append(drawLine('-', 70)).append('\n') testCaseReport.each { kase, tcReport -> report.append("Name : ${kase}\n") report.append("Status : ${getResult(tcReport.status)}\n") report.append("Properties : ${tcReport.properties.toString()}\n") } report } //Get the detailed report def getDetailedReport(projectResultHolder) { def report = new StringBuffer() report.append(drawLine()).append('\n') report.append("\t\t\tTest Execution Detailed Report\n") report.append(drawLine()).append('\n') projectResultHolder.suiteResults.each { suite, details -> report.append("Test Suite : ${suite}\n") report.append("Result : ${getResult(details.status)}\n") report.append("Total Cases : ${details.testCaseCount}\n") report.append("Cases Passed : ${details.passedCasesCount}\n") report.append("Cases Failed: ${details.failedCasesCount}\n") report.append(getTestCaseReport(details.casaeResults)) report.append(drawLine()).append('\n') report.append(drawLine()).append('\n') } report } //Save the contents to a file def saveToFile(file, content) { if (!file.parentFile.exists()) { file.parentFile.mkdirs() log.info "Directory did not exist, created" } file.write(content) assert file.exists(), "${file.name} not created" } def holder = new ProjectResultsHolder(log: log) holder.buildProjectResults(runner, project.name) def finalReport = new StringBuffer() finalReport.append(getSummaryReport(project, holder)) finalReport.append(getDetailedReport(holder)) def reportFile = new File(reportFileName) saveToFile(reportFile, finalReport.toString())Solved1.4KViews0likes1Comment