从项目级别的拆解脚本中获取测试报告中的自定义属性值

问题描述

我在SOAP UI开源版本的项目级别拆除脚本中将以下代码用于测试报告生成。我想通过添加要在报表中显示的项目级别“自定义属性”值来修改报表。我已经尝试过但无法在报告中获得“自定义属性”。

如果有人可以解决这个问题,将非常有帮助。

/**
*
* 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/Automation${today}" as String

def fileNamePart = new Date().format("yyyy-MM-dd'T'HH.mm.ss")

//creating filename dynamically.
def reportFileName = "${filePrefix}/Automation_TestReport_${fileNamePart}.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('-',60)).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('-',60)).append('\n')
    report.append("\t\tTest Case Details:\n")
    report.append(drawLine('-',60)).append('\n')
      testCaseReport.each { kase,tcReport ->
      report.append("Name : ${kase}\n")
      report.append("Status : ${getResult(tcReport.status)}\n")
        if (!tcReport.status) {
            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())

解决方法

下面是您可以使用的代码段。屏幕截图显示了我在项目拆卸脚本中使用了此脚本。 集成以下代码,根据您的要求添加/添加到StringBuffer“ finalReport.append()”内容。

    List<String> plist = project.getPropertyNames()
    plist.each{it -> log.info "key = "+ it.toString() 
//finalReport.append("key = "+ it.toString())
    log.info "Value ="+project.getPropertyValue(it.toString())}

https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/doc/generate_svg.sh

接受适用于您的解决方案,它也会帮助其他人

,

帖子很旧,但是如果有人尝试不同的方法来寻找解决方案,那么以下代码最终对我有用:

    def createProperties(testCase) {
        // 'Properties' must match your step properties-box name you assigned,// by the way default value is just 'Properties'
        if (testCase.testSteps["Properties"]){
            testCase.testSteps["Properties"].getPropertyNames().each { key ->
                properties[key] = testCase.testSteps["Properties"].getPropertyValue(key)
                log.info "Created properties ${key} = " + properties[key]
            }       
        }     
    }