gitlab_ci.yml展示单元测试报告 (FREE)

news2024/12/29 13:48:54

CI/CD 流水线通常包含验证您的代码的测试作业。 如果测试失败,流水线将失败并通知用户。处理合并请求的人必须检查作业日志并查看测试失败的地方,以便可以修复它们。

您可以将作业配置为使用单元测试报告,极狐GitLab 会显示有关合并请求的报告,以便更轻松、更快速地识别故障,而无需检查整个日志。单元测试报告目前仅支持 JUnit 报告格式的测试报告。

如果您不使用合并请求但仍希望在不搜索作业日志的情况下查看单元测试报告输出,则流水线中提供完整的单元测试报告详细视图。

考虑以下工作流程:

  1. 您的默认分支坚如磐石,您的项目正在使用极狐GitLab CI/CD,并且您的流水线表明没有任何损坏。
  2. 您团队中的某个人提交了合并请求,测试失败并且流水线获得已知红色图标。要进行更多调查,您必须查看作业日志来找出测试失败的原因,这些日志通常包含数千行。
  3. 您配置单元测试报告,极狐GitLab 立即收集并在合并请求中公开它们,您不再需要在作业日志中搜索。
  4. 您的开发和调试工作流程变得更容易、更快、更高效。

工作原理

首先,极狐GitLab Runner 上传所有 JUnit 报告格式 XML 文件到极狐GitLab,作为产物。然后,当您访问合并请求时,极狐GitLab 开始比较 head 和 base 分支的 JUnit 报告格式 XML 文件,其中:

  • base 分支是目标分支(通常是默认分支)。
  • head 分支是源分支(每个合并请求中的最新流水线)。

报告面板有一个摘要,显示有多少测试失败、有多少错误以及有多少已修复。如果由于 base 分支的数据不可用而无法进行比较,则面板仅显示 head 的失败测试列表。

有四种类型的结果:

  1. **新失败的测试:**测试用例在 base 分支上通过,在 head 分支上失败
  2. **新遇到的错误:**测试用例在 base 分支上通过,但由于 head 分支上的测试错误而失败
  3. **现有故障:**测试用例在 base 分支上失败,在 head 分支上失败
  4. 已解决的故障: 测试用例在 base 分支上失败,在 head 分支上通过

面板中的每个条目都显示了上面列表中的测试名称及其类型。单击测试名称会打开一个窗口,其中包含其执行时间和错误输出的详细信息。

 

最近失败的次数

如果过去 14 天内项目的默认分支中的测试失败,则会为该测试显示一条消息,如 Failed {n} time(s) in {default_branch} in the last 14 days

如何设置

要在合并请求中启用单元测试报告,您必须在 .gitlab-ci.yml 中添加 artifacts:reports:junit,并指定生成测试报告的路径。 报告必须是 .xml 文件,否则极狐GitLab 返回错误 500。

在以下 Ruby 示例中,test 阶段的作业运行,系统从作业中收集单元测试报告。作业执行后,XML 报告作为产物存储在极狐GitLab 中,结果显示在合并请求部件中。

## Use https://github.com/sj26/rspec_junit_formatter to generate a JUnit report format XML file with rspec
ruby:
  stage: test
  script:
    - bundle install
    - bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml
  artifacts:
    when: always
    paths:
      - rspec.xml
    reports:
      junit: rspec.xml

## Use https://github.com/sj26/rspec_junit_formatter to generate a JUnit report format XML file with rspec
ruby:
  stage: test
  script:
    - bundle install
    - bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml
  artifacts:
    when: always
    paths:
      - rspec.xml
    reports:
      junit: rspec.xml

要使单元测试报告输出文件可浏览,请将它们包含在 artifacts:paths 关键字中,如示例中所示。 即使作业失败(例如,如果测试未通过)也要上传报告,请使用 artifacts:when:always 关键字。

JUnit 报告格式 XML 文件中不能有多个具有相同名称和类的测试。

在 15.0 及更早版本中,来自 parallel:matrix 作业的测试报告被聚合在一起,可能会导致某些报告信息不显示。 在 15.1 及更高版本中,此 bug 已修复,并显示所有报告信息。

在极狐GitLab 上查看单元测试报告

如果生成 JUnit 报告格式 XML 文件并将其作为流水线的一部分上传,则可以在流水线详细信息页面中查看这些报告。此页面上的 测试 选项卡显示从 XML 文件报告的测试套件和案例列表。

 

您可以查看所有已知的测试套件并选择其中的每一个以查看更多详细信息,包括组成该套件的案例。

单元测试报告解析错误

引入于 13.10 版本

如果解析 JUnit 报告 XML 导致错误,作业名称旁边会显示一个指示符。将鼠标悬停在图标上会在工具提示中显示解析器错误。如果多个解析错误来自分组作业,仅显示该组中的第一个错误。

 

极狐GitLab 不会解析非常大的节点 的 JUnit 报告。

在极狐GitLab 上查看 JUnit 屏幕截图

将您的屏幕截图作为产物上传到极狐GitLab。如果 JUnit 报告格式 XML 文件包含 attachment 标签,极狐GitLab 会解析附件。注意:

  • attachment 标签必须包含您上传的屏幕截图的 $CI_PROJECT_DIR 的相对路径。例如:

    <testcase time="1.00" name="Test">
      <system-out>[[ATTACHMENT|/path/to/some/file]]</system-out>
    </testcase>
  • 您应该将上传屏幕截图的作业设置为 artifacts:when: always,以便在测试失败时仍然上传屏幕截图。

测试用例附件的链接出现在流水线测试报告的测试用例详细信息中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种实现Spring动态数据源切换的方法 | 京东云技术团队

1 目标 不在现有查询代码逻辑上做任何改动&#xff0c;实现dao维度的数据源切换&#xff08;即表维度&#xff09; 2 使用场景 节约bdp的集群资源。接入新的宽表时&#xff0c;通常uat验证后就会停止集群释放资源&#xff0c;在对应的查询服务器uat环境时需要查询的是生产库…

SegNeXt:重新思考语义分割中卷积注意力设计

论文链接&#xff1a;https://arxiv.org/abs/2209.08575 github&#xff1a; https://github.com/Visual-Attention-Network/SegNeXt 参考视频&#xff1a;【翻译成中文带你读】SegNext论文逐行精读&#xff0c;30分钟就能快速了解其奥秘&#xff01;-人工智能/深度学习/计算…

Triton教程---存储代理

Triton教程—存储代理 存储库代理使用在加载或卸载模型时运行的新功能扩展了 Triton。 您可以在加载模型时引入自己的代码来执行身份验证、解密、转换或类似操作。 测试版&#xff1a;存储库代理 API 是测试版质量&#xff0c;并且会针对一个或多个版本进行非向后兼容的更改。…

牛客网 2023 最新 “Java 面试八股文+各大厂的面试真题“出炉,面面俱到,太全了

一转眼 2023 年已经过了大半了&#xff0c;不知道你金三银四上岸了&#xff0c;还是等着秋招呢&#xff1f;大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多&#xff0c;Java 岗位的招聘薪酬天差地别&#xff0c;人才要求也是五花八门。而很多 Java 工程师求职过…

css3 grid 布局

特别声明&#xff1a;这篇博客转载于阮一峰老师&#xff0c;转载是为了方便日后复习&#xff0c;实在写的太棒了。 目录 一、概述 二、基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三、容器属性 3.1 display 属性 3.2grid-template-columns 属性&#x…

[Studio3T]无限试用

新建文本文件 echo off ECHO 重置Studio 3T的使用日期...... REG DELETE "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise" /f RMDIR /s /q %USERPROFILE%\.3T\studio-3t\soduz3vqhnnja46uvu3szq-- RMDIR /s /q %USERPROFILE%\.3T\studio-3t\L…

数字电路基础---触发器

数字电路基础---触发器 触发器&#xff08;Flip-Flop&#xff09;也是数字电路中的一种具有记忆功能的逻辑元件。触发器对脉冲边沿敏感的存储单元电路&#xff0c;它只在触发脉冲的上升沿&#xff08;或下降沿&#xff09;瞬间改变其状态。在数字电路中可以记录二进制数字信号“…

crfclust.bdb过大

有套11204集群环境&#xff0c;现场反馈/u01使用率100%&#xff0c;数据库无法使用了&#xff0c;本以为是aud文件太多导致的&#xff0c;查看后发现是crfclust.bdb多大了&#xff0c;有100多G了 [roothydb1 hydb1]#du -sh crfclust.bdb 101G crfclust.bdb [roothydb1 hydb…

31个最佳 JavaScript 片段

这里有 20 个有用的 JavaScript 片段&#xff0c;可以在您处理项目时为您提供帮助&#xff1a; 1.获取当前日期和时间&#xff1a; const now new Date(); 2. 检查变量是否为数组&#xff1a; Array.isArray(variable); 3.合并两个数组&#xff1a; const newArray array1.co…

学习svg 基本使用

一.实例展示 1.鼠标移动 <svg width"34px" height"34px" viewBox"0 0 34 34" version"1.1" xmlns"http://www.w3.org/2000/svg" dcindex"189"><g id"画板" stroke"none" stroke-wi…

机器学习-学习总结

1.课程整体目录&#xff1a; 2.课程地址 飞桨AI Studio - 人工智能学习与实训社区 2.1 回归 2.1.1线性回归和逻辑回归的联系和区别 【ML】线性回归和逻辑回归的联系和区别_逻辑回归和线性回归的区别_机器不学习我学习的博客-CSDN博客 2.1.2 线性回归和逻辑回归重要公式推导…

自然语言处理: 第三章NPLM(Neural Probabilistic Language Mode)

理论基础 NPLM的全称是"Neural Probabilistic Language Model"&#xff0c;即神经概率语言模型。这是一种基于神经网络的语言模型&#xff0c;用于生成自然语言文本。最早是由Bengio 在2003年的A Neural Probabilistic Language Model一文中提出来的&#xff0c; NP…

卖家必读,深入了解亚马逊,速卖通,temu测评补单方式的各种利弊

大部分人对补单的认识还停留在刷好评、信誉上&#xff0c;事实上&#xff0c;信誉等级和好评仅是补单的目标之一&#xff0c;不是目标的全部。 对于一个真正的老手来说&#xff0c;补单真正的目的是提升自己宝贝的权重和搜索排名。因为信誉等级和好评相对来说比较简单。 我们试…

从零开始 Spring Boot 43:DI 注解

从零开始 Spring Boot 43&#xff1a;DI 注解 图源&#xff1a;简书 (jianshu.com) Spring 通过注解实现 DI&#xff08;依赖注入&#xff09;&#xff0c;本文详细讨论这些注解。 Autowired Autowired是 Spring 定义的注解&#xff0c;属于包org.springframework.beans.fac…

【无标题】AI+电力、大模型主题人工智能师资培训班重磅招募中

大语言模型热度空前&#xff0c;诸如文心一言、ChatGPT 等已经能够与人对话互动、回答问题、协助创作&#xff0c;逐渐应用于人们的工作和生活&#xff0c;也引发了社会热议。人工智能赋能新型电力系统下新能源发电、变电、调度、配网、安监、营销、基建以及企业经营管理等领域…

强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

MySQL数据库的高级操作

数据表高级操作 一、克隆表&#xff0c;将数据表的数据记录生成到新的表中方法一方法二 二、清空表&#xff0c;删除表内的所有数据方法一方法二 三、创建临时表四、创建外键约束&#xff0c;保证数据的完整性和一致性。1、外键的定义2、主键表和外键表的理解3、MySQL中6种常见…

盘点一个Python自动化办公案例分享

背景&#xff1a;某公司需要对某一款产品的销售情况进行跟踪和分析&#xff0c;分析需求包括必要的统计图表生成&#xff0c;数据分析&#xff0c;生成报告等操作。 解决方案&#xff1a;利用 Python 编写自动化程序&#xff0c;实现对该产品的销售数据自动抓取&#xff0c;数据…

【python+Coppeliasim】仓储机器人

一、仓储机器人介绍 仓储机器人&#xff08;也称为自动导航AGV&#xff0c;Automated Guided Vehicle&#xff09;是一种智能机器人系统&#xff0c;专门设计用于在仓库、物流中心和制造业等环境中执行货物搬运和物流任务。它们被广泛应用于自动化仓储和物流管理系统中&#xf…

详解HTTP协议和HTTPS协议

目录 一.HTTP协议 1.什么是HTTP 2.HTTP发展历史 3.HTTP请求和响应 4. 抓包的方式和工具Fiddler 1.开发者工具 2.Fiddler 二.请求和响应 1.请求和响应报文 2.URL结构 3.常见的方法 1.GET方法 2.POST方法 3.其他方法 三.请求报头(header) 1.Host 2.Content-Length 3.Co…