Jenkins使用groovy脚本构建测试用例通过失败计数
我想使用groovy脚本获取构建的总测试用例通过和失败计数。我正在使用Junit测试结果。我使用的是多配置项目,那么有没有办法在每个配置的基础上找到这些信息?我认为您可以通过以下方式来完成:Jenkins使用groovy脚本构建测试用例通过失败计数,groovy,junit,jenkins,hudson,Groovy,Junit,Jenkins,Hudson,我想使用groovy脚本获取构建的总测试用例通过和失败计数。我正在使用Junit测试结果。我使用的是多配置项目,那么有没有办法在每个配置的基础上找到这些信息?我认为您可以通过以下方式来完成: import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; File fXmlFile = new File("junit-t
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
File fXmlFile = new File("junit-tests.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
println("Total : " + doc.getDocumentElement().getAttribute("tests"))
println("Failed : " +doc.getDocumentElement().getAttribute("failures"))
println("Errors : " +doc.getDocumentElement().getAttribute("errors"))
我想你可以用这样的方法来做:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
File fXmlFile = new File("junit-tests.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
println("Total : " + doc.getDocumentElement().getAttribute("tests"))
println("Failed : " +doc.getDocumentElement().getAttribute("failures"))
println("Errors : " +doc.getDocumentElement().getAttribute("errors"))
如果使用该插件,可以直接从构建ie访问Jenkins TestResultAction
import hudson.model.*
def build = manager.build
int total = build.getTestResultAction().getTotalCount()
int failed = build.getTestResultAction().getFailCount()
int skipped = build.getTestResultAction().getSkipCount()
// can also be accessed like build.testResultAction.failCount
manager.listener.logger.println('Total: ' + total)
manager.listener.logger.println('Failed: ' + failed)
manager.listener.logger.println('Skipped: ' + skipped)
manager.listener.logger.println('Passed: ' + (total - failed - skipped))
用于附加TestResultAction方法/属性的API
如果要从其他作业访问矩阵生成,可以执行以下操作:
def job = Jenkins.instance.getItemByFullName('MyJobName/MyAxisName=MyAxisValue');
def build = job.getLastBuild()
...
如果使用该插件,可以直接从构建ie访问Jenkins TestResultAction
import hudson.model.*
def build = manager.build
int total = build.getTestResultAction().getTotalCount()
int failed = build.getTestResultAction().getFailCount()
int skipped = build.getTestResultAction().getSkipCount()
// can also be accessed like build.testResultAction.failCount
manager.listener.logger.println('Total: ' + total)
manager.listener.logger.println('Failed: ' + failed)
manager.listener.logger.println('Skipped: ' + skipped)
manager.listener.logger.println('Passed: ' + (total - failed - skipped))
用于附加TestResultAction方法/属性的API
如果要从其他作业访问矩阵生成,可以执行以下操作:
def job = Jenkins.instance.getItemByFullName('MyJobName/MyAxisName=MyAxisValue');
def build = job.getLastBuild()
...
对于管道(工作流)作业类型,逻辑与AlexS对大多数其他作业类型的回答略有不同:
build.getActions(hudson.tasks.junit.TestResultAction).each {action ->
action.getTotalCount()
action.getFailCount()
action.getSkipCount()
}
(见附件)
作业没有getTestResultAction()方法
我使用这种逻辑来消除歧义:
if (build.respondsTo('getTestResultAction')) {
//normal logic, see answer by AlexS
} else {
// pipeline logic above
}
对于管道(工作流)作业类型,逻辑与AlexS对大多数其他作业类型的回答略有不同:
build.getActions(hudson.tasks.junit.TestResultAction).each {action ->
action.getTotalCount()
action.getFailCount()
action.getSkipCount()
}
(见附件)
作业没有getTestResultAction()方法
我使用这种逻辑来消除歧义:
if (build.respondsTo('getTestResultAction')) {
//normal logic, see answer by AlexS
} else {
// pipeline logic above
}
我还收集JUnitXML测试结果,并使用Groovy构建后插件检查通过/失败/跳过计数。确保生成后操作的顺序在groovy生成后脚本之前包含junit xml 此示例脚本显示如何获取测试结果、使用结果计数设置生成描述以及version.txt文件中的版本信息,以及如何在跳过所有测试的情况下将总体生成结果更改为不稳定
def currentBuild = Thread.currentThread().executable
// must be run groovy post-build action AFTER harvest junit xml
testResult1 = currentBuild.testResultAction
currentBuild.setDescription(currentBuild.getDescription() + "\n pass:"+testResult1.result.passCount.toString()+", fail:"+testResult1.result.failCount.toString()+", skip:"+testResult1.result.skipCount.toString())
// if no pass, no fail all skip then set result to unstable
if (testResult1.result.passCount == 0 && testResult1.result.failCount == 0 && testResult1.result.skipCount > 0) {
currentBuild.result = hudson.model.Result.UNSTABLE
}
currentBuild.setDescription(currentBuild.getDescription() + "\n" + currentBuild.result.toString())
def ws = manager.build.workspace.getRemote()
myFile = new File(ws + "/VERSION.txt")
desc = myFile.readLines()
currentBuild.setDescription(currentBuild.getDescription() + "\n" + desc)
我还收集JUnitXML测试结果,并使用Groovy构建后插件检查通过/失败/跳过计数。确保生成后操作的顺序在groovy生成后脚本之前包含junit xml 此示例脚本显示如何获取测试结果、使用结果计数设置生成描述以及version.txt文件中的版本信息,以及如何在跳过所有测试的情况下将总体生成结果更改为不稳定
def currentBuild = Thread.currentThread().executable
// must be run groovy post-build action AFTER harvest junit xml
testResult1 = currentBuild.testResultAction
currentBuild.setDescription(currentBuild.getDescription() + "\n pass:"+testResult1.result.passCount.toString()+", fail:"+testResult1.result.failCount.toString()+", skip:"+testResult1.result.skipCount.toString())
// if no pass, no fail all skip then set result to unstable
if (testResult1.result.passCount == 0 && testResult1.result.failCount == 0 && testResult1.result.skipCount > 0) {
currentBuild.result = hudson.model.Result.UNSTABLE
}
currentBuild.setDescription(currentBuild.getDescription() + "\n" + currentBuild.result.toString())
def ws = manager.build.workspace.getRemote()
myFile = new File(ws + "/VERSION.txt")
desc = myFile.readLines()
currentBuild.setDescription(currentBuild.getDescription() + "\n" + desc)
在测试报告中,我还想添加错误测试用例作为第四类。有可能吗?@limonik,Jenkins Junit插件似乎将“错误”和“失败”捆绑到一个概念中(虽然我在这里可能是错的),所以我不认为你可以开箱即用。在测试报告中,我还想添加错误测试用例作为第四类。有可能吗?@limonik,Jenkins Junit插件似乎将“错误”和“失败”捆绑在一个概念中(虽然我在这里可能是错的),所以我不认为你可以开箱即用。