如何通过GitLab REST/GraphQL API查询不稳定测试
可行方案整理
1. 批量GraphQL查询减少请求次数
先通过GraphQL一次性拉取指定时间范围内所有流水线及其关联的测试构建ID,再用批量查询或片段复用的方式,一次性请求多个流水线的测试数据,避免逐个请求的繁琐:
- 第一步:获取目标时间范围内的流水线及对应测试构建ID
query GetPipelinesWithBuilds { project(fullPath: "path_to/my_project") { pipelines(createdAfter: "2024-01-01T00:00:00Z", createdBefore: "2024-02-01T00:00:00Z") { nodes { iid jobs(status: SUCCESS, namePattern: "test") { # 筛选测试相关的job,根据实际job名调整 nodes { id } } } } } }
- 第二步:用批量查询一次性获取所有目标流水线的测试数据
query GetFlakeyTestsBatch { pipeline1: project(fullPath: "path_to/my_project") { pipeline(iid: "261264") { testSuite(buildIds: "1671439") { testCases { nodes { name classname recentFailures { count baseBranch } } } } } } pipeline2: project(fullPath: "path_to/my_project") { pipeline(iid: "261265") { testSuite(buildIds: "1671440") { testCases { nodes { name classname recentFailures { count baseBranch } } } } } } # 可继续添加更多流水线查询 }
2. 用REST API批量自动化处理
虽然没有直接返回不稳定测试的REST接口,但可以通过组合多个REST接口,用脚本自动化遍历时间范围内的流水线并聚合数据:
- 调用
GET /projects/:id/pipelines,通过updated_after和updated_before参数筛选时间范围内的流水线,拿到所有流水线ID。 - 对每个流水线,调用
GET /projects/:id/pipelines/:pipeline_id/jobs,筛选出测试类型的job(根据job名称判断),拿到job的ID。 - 调用你发现的
/pipelines/:pipeline_id/tests/suite.json?build_ids[]=:job_id接口,拉取测试数据,最后在脚本里聚合所有测试用例的recent_failures数据,筛选出失败次数多的不稳定测试。
用Python、Shell等脚本可以轻松实现循环请求、数据解析和聚合,比手动操作效率高很多。
3. 利用GitLab内置的测试分析功能(需Premium/Ultimate版本)
如果你的GitLab是Premium或更高版本,直接用项目内的Analytics > Test Analytics功能:
- 进入项目后,在左侧菜单找到Analytics -> Test Analytics
- 可设置时间范围,查看测试用例的失败次数、通过率等统计,系统会自动识别频繁失败的不稳定测试,无需自己写查询脚本。
4. 自定义GitLab CI/CD收集测试数据
在项目的CI/CD流水线里添加一个阶段,每次测试跑完后,将测试报告中的recent_failures数据上传到自定义存储(比如数据库、GitLab的CI/CD变量或项目wiki),后续直接从这个存储中查询聚合好的不稳定测试数据,避免每次重新遍历历史流水线。
内容的提问来源于stack exchange,提问作者br3nt
相关产品推荐
相关产品推荐

