返回介绍

单测集成最佳实践

发布于 2024-05-30 23:00:45 字数 25459 浏览 0 评论 0 收藏 0

1. 前言

本文介绍了使用阿里云云效-专有云版本的单测集成产品,对软件产品的代码扫描、单测集成等功能进行详细的介绍。本文以一个应用场景为例,提供代码扫描、单元测试编写规则等方面的参考示例,可为研发人员与测试人员使用。


2. 最佳实践概述

软件单测集成是 DevOps 的重要环节之一,是衡量代码质量的重要指标之一。同时,该环节本身也是一个较为复杂的流程,包括了代码扫描、单测用例的编写等。

【适用场景】

  • 代码仓库管理的开发模式

方案架构单测

方案优势

  • 提升代码质量、提升研发质量意识。

3. 前置条件

在执行本文操作前,请完成以下准备工作:

  • 所在公司已购买并开通云效单测集成产品模块。
  • 已注册云效账号并完成认证,可以登录云效平台。
  • 完成云效产品培训并通过相关考试。
  • 加入云效的钉钉答疑群(联系本公司云效接口负责人入群)。
  • 产品需求相关方(业务方、PD、UED、PM、技术架构、开发、测试、验收等)已经通过钉钉或企业微信建立实时通信群。

4. 工具准备

  • 本方案使用 Chrome 浏览器,需提前准备。
  • 安装钉钉或企业微信。

5. 使用流程

5.1 单元测试代码编写规范

云效平台的单测集成支持 Java、NodeJs、C++ 等主流语言,本文档以 Java 语言为例描述单元测试的编写规范,详细内容参考附录《单元测试规范》。

5.2 单测集成配置

说明】:在运行代码扫描与单测集成前,需要检查集成配置,配置内容包含 JDK 版本、maven 版本、pom 文件路径等属性项。针对 Java 语言使用 maven 的构建方式,一般采取默认配置即可。如果默认配置不符合要求,则需要更改,更改的操作步骤如下。

操作步骤】:

  1. 在云效左侧导航栏持续交付中选择单测集成 > 变更集 > 变更集列表,进入项目集成列表页面。单测
  2. 点击需要配置的项目。单测
  3. 进入项目详情页面后,点击运行 > 集成配置单测
  4. 进入集成配置编辑页面,根据实际情况更改相应属性项。单测

5.3 编写代码与单元测试(线下)

研发人员在本机编写功能代码与单元测试,单元测试编码规则参考附录《单元测试规范》,编写完成后将代码提交至代码仓库。

5.4 执行代码扫描与单元测试

说明】:研发人员在本机编写代码完成后,将代码上传至代码仓库,云效监听代码仓库的变化,自动触发代码扫描并执行单元测试,在云效中可查看执行状态。

操作步骤】:点击单测集成 > 变更集列表进入选择变更集列表页面,点击项目左侧 “+” 查看执行状态。单测

执行状态说明】:

编号状态说明
1未创建该应用信息在 Amon 中已存在,但是集成任务还未创建
2未运行该应用信息在 Amon 中已创建集成任务,但是集成任务还没有运行
3排队中该应用在 Amon 运行集成任务,在排队等待中
4运行中该应用在 Amon 中集成任务正在运行状态
5编译超时该应用在 Amon 中运行集成任务时,编译时间超过上限,任务中断
6任务中断该应用在 Amon 运行集成任务,运行时间超过上限,系统中断任务
7构建失败该应用在 Amon 运行集成任务,构建失败
8测试类编译失败该应用在 Amon 运行集成任务,测试类构建失败
9主类编译失败该应用在 Amon 运行集成任务,主类构建失败
10编译失败该应用在 Amon 运行集成任务,编译失败
11没有权限该应用在 Amon 运行集成任务,没有权限拉取代码
12用例失败该应用在 Amon 运行集成任务,单元测试用例部分执行失败
13全部通过该应用在 Amon 运行集成任务,单元测试用例全部执行通过
14已删除该应用在 Amon 的集成任务删除,无需在运行

5.5 查看扫描结果

说明】:当执行完成后,可查看扫描出的问题数量,点击问题数查看问题详细描述,根据描述中的建议进行修复。

操作步骤】:

  1. 在变更集集成列表页中,点击变更集 > 变更集列表 > 选择变更集 > 静态扫描 > 数字,系统跳转至扫描详情列表页。单测
  2. 进入扫描详情页面,点击 “+” 查看错误详细信息。单测
  3. 如果问题不严重,则可以暂时忽略,后期再修复,具体页面如下。单测
  4. 在弹出的窗口中输入忽略原因。单测
  5. 如果需要忽略的记录比较多,也可以批量忽略。单测

5.6 修复扫描出的问题(线下)

研发人员根据扫描出的问题提示在本机进行修复,修复完毕后重新提交至代码仓库,云效会自动触发代码扫描并执行单元测试。

5.7 查看代码模块统计报表

说明】:云效中可以查看某个项目或者所有项目的代码质量趋势。

操作步骤】:点击单测集成 > 报表 > 代码模块统计,进入代码模块统计页面。单测

6. 单测集成中的常见问题 & 解决

6.1 单测集成 “没有权限”

【问题描述】:点击变更集 > 申请变更 > 拉取分支,编译打包成功,但在单测集成中构建状态显示 “没有权限”。单测

【问题定位步骤】:

  1. 点击更多按钮,同步配置(同步 Aton 配置到 Amon)后重试。
  2. 点击 “没有权限” 链接,查看日志详情。 —— 代码拉取失败,确定没有权限。
  3. 查看 Jenkins 任务列表,查看任务详情。 —— 任务中有构建任务,Jenkins 同步正常,最终确认,Codeup 白名单权限问题,Amon 构建机不在白名单。单测

6.2 构建失败(sonar)

【问题描述】:执行单测构建时,状态显示“构建失败”。单测

【问题定位步骤】:

  1. 查看日志,代码拉取、静态检查成功,sonar 部分报错。
  2. 复制sonar地址到浏览器,检查 sonar 是否可正常访问。 —— 本次问题原因 sonar host 映射未配置,不能正常访问(增加 hosts 映射后“构建成功”)。
  3. 检查 sonar 其他配置信息。

6.3 单元测试用例执行数为 “0”

【问题描述】:单测集成模块中,单元测试执行总数为 0,查看日志,单元测试模块未找到可执行的单测用例。单测

单测

【问题定位步骤】:

  1. 本地环境maven执行单元测试,检查是否成功。 —— 本地执行命令 “mvn test”,依然无法找到用例,查看资料发现,使用 Junit5 版本需要增加相关插件(详见以下 xml 内容)。 单测

    <plugins xmlns="http://maven.apache.org/POM/4.0.0">
    
      <!-- Junit5 执行依赖插件配置 -->
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <includes>
                    <include>**/Test*.java</include>
                    <include>**/*Test.java</include>
                    <include>**/*Tests.java</include>
                    <include>**/*TestCase.java</include>
                </includes>
                <properties>
                    <excludeTags>slow</excludeTags>
                </properties>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.0.2</version>
                </dependency>
          <dependency>
                    <groupId>org.junit.jupiter</groupId>
                    <artifactId>junit-jupiter-engine</artifactId>
                    <version>5.0.2</version>
                </dependency>
                <dependency>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
                <version>4.12.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
    
  2. 修改完本地 pom.xml 后提交,运行构建任务,单测执行任为 0。

    —— 进入单测集成 > 变更集列表 > 详情 > 集成配置,找到 “maven 插件配置” 属性,将上一步的插件内容拷贝到 “maven插件配置” 项中,点击保存。重新运行集成构建,单测执行正常。单测

6.4 单测覆盖率统计为空

【问题描述】:单测执行通过率 100%,覆盖率中数据为空。单测 【问题定位步骤】:

  1. 本地执行 “mvn test”,检查覆盖率统计报告是否成功,报告文件 “jacoco.csv”,正常。单测

  2. 检查覆盖统计插件配置,正常。单测

  3. 检查覆盖率收集的配置。 系统中缺少该项配置,与开发同学确认,数据库表 “amon_template_config” 中缺少一条数据(jcoco 插件配置)。重新初始化数据后,配置项可见,重新执行任务,覆盖率统计正确。单测

    单测

    单测

    单测

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文