You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Jenkins API从测试报告中仅获取失败测试用例?

问题

如何获取Jenkins中已失败测试的相关信息?

我已经能通过以下命令获取完整测试报告:

curl jenkins.com/job/myjob/lastCompletedBuild/testReport/api/json

但测试列表过大时,不想先下载全量数据再本地过滤,希望在服务器端完成过滤。

查看Jenkins实例的API文档页面(jenkins.com/job/myjob/lastCompletedBuild/testReport/api)里的「控制获取数据量」章节,没有找到按值过滤数据的说明。

我尝试用以下命令获取部分字段,但仍会同时返回PASSED和FAILED测试,数据体积还是超出预期:

curl jenkins.com/job/myjob/lastCompletedBuild/testReport/api/json?tree=suites[cases[name,status]]
解决方案

Jenkins原生REST API的tree参数仅支持指定返回字段,不直接支持按值过滤,但有三种可行的服务器端过滤方案:

1. 用XPath参数过滤

Jenkins API支持通过xpath参数筛选结果,构造表达式只提取status为FAILED的测试用例:

XML格式结果

curl "jenkins.com/job/myjob/lastCompletedBuild/testReport/api/xml?xpath=//case[status='FAILED']&wrapper=failedTests"

JSON格式结果

如果需要JSON,可以在请求中添加json参数将XML结果转换:

curl "jenkins.com/job/myjob/lastCompletedBuild/testReport/api/json?xpath=//case[status='FAILED']&wrapper=failedTests"

注意:XPath过滤依赖Jenkins的XML API端点可用,需确保实例配置允许该访问方式。

2. 通过Groovy脚本控制台API过滤

利用Jenkins的脚本控制台API,直接在服务器端执行Groovy脚本提取失败测试数据,可自定义返回字段:

curl -X POST jenkins.com/scriptText --data-urlencode "script=
def build = Jenkins.instance.getItemByFullName('myjob').getLastCompletedBuild()
def testResult = build.getTestResult()
def failedTests = []
testResult.getFailedTests().each { test ->
    failedTests.add([
        name: test.getName(),
        status: test.getStatus().toString(),
        errorDetails: test.getErrorDetails()
    ])
}
println new groovy.json.JsonBuilder(failedTests).toPrettyString()
"

这种方式灵活性极强,适合需要自定义返回结构或复杂过滤规则的场景。

3. 安装插件扩展API

安装Filtered Test Result Plugin,该插件会为测试报告API添加过滤参数支持,安装后可直接通过URL指定过滤条件:

curl jenkins.com/job/myjob/lastCompletedBuild/testReport/api/json?status=FAILED

内容的提问来源于stack exchange,提问作者Moberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:24:51