处理 Jenkins 中的测试预期失败与构建状态的设置

简介: 本文将讨论如何在 Jenkins 中处理测试中的预期失败情况,并将其与构建状态相结合,以便更好地监控和管理项目的健康状况。

处理 Jenkins 中的测试预期失败与构建状态的设置

在自动化测试的过程中,持续集成是一个至关重要的环节,可以帮助团队更高效地进行代码集成和测试。Jenkins作为一个流行的持续集成工具,提供了丰富的功能来支持构建、测试和部署。本文将讨论如何在 Jenkins 中处理测试中的预期失败情况,并将其与构建状态相结合,以便更好地监控和管理项目的健康状况。

问题引入:预期失败的测试和构建状态

在自动化测试中,有时我们会遇到预期失败的测试情况。

这可能是由于功能尚未实现、缺少依赖、环境问题等引起的。在测试框架中,我们可以使用 xfail 标记来标记预期失败的测试用例。

然而,如果仅仅将测试标记为预期失败,它在 Jenkins 中将不会影响构建的状态,可能会导致错误的构建结果。
我们希望能够根据预期失败的测试情况,适当地调整构建状态,以便更准确地反映项目的质量。

测试脚本中的 xfail 使用:在执行用例前,先检查当前设备是否联网,没有网络就失败不再继续往下执行

gen_report(
    results=[
        {
   
            "result": [
                "warning_report",
                "Warning: The current device network is abnormal, please check it and run it again!",
            ]
        }
    ],
    report_path=warning_report,
)
# todo: xfail is skip ,fail is fail. Lack of multi-device differentiation.
pytest.xfail(
    f"The current device {idx} network is abnormal, please check it and run it again!"
)

解决方案一:Groovy 脚本定制构建后操作

这种方法需要一定的脚本编写和配置,但提供了高度的灵活性和定制性。

一种解决方案是使用 Jenkins 的 "Groovy Postbuild" 步骤来自定义构建后操作。我们可以编写 Groovy 脚本来分析测试日志,检查是否存在预期失败的标记,并根据情况将构建状态设置为 "UNSTABLE" 或其他适当的状态。

在 "Groovy Postbuild" 步骤中,编写 Groovy 脚本来解析测试日志并检查是否存在 "XFAIL" 标记。如果存在,则设置构建状态为 "失败"。

以下是一个示例的 Groovy 脚本:

def logContainsXFail = manager.getLogMatcher(".+XFAIL.+")  // Use regex to match "XFAIL" in log

if (logContainsXFail) {
   
    manager.buildFailure()
}

执行Jenkins job之后报错,如下

没有权限,需要审批该Groovy 脚本

[PostBuildScript] - [INFO] Executing post build scripts.
[PostBuildScript] - [INFO] An error occured during post-build processing.
org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use
    at org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.using(ScriptApproval.java:474)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:377)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:314)
    at org.jenkinsci.plugins.postbuildscript.service.GroovyScriptExecutor.execute(GroovyScriptExecutor.java:49)
    at org.jenkinsci.plugins.postbuildscript.service.GroovyScriptPreparer.evaluateScript(GroovyScriptPreparer.java:53)
    at org.jenkinsci.plugins.postbuildscript.service.GroovyScriptPreparer.evaluateScript(GroovyScriptPreparer.java:38)
    at org.jenkinsci.plugins.postbuildscript.processor.Processor.processGroovyScripts(Processor.java:152)
    at org.jenkinsci.plugins.postbuildscript.processor.Processor.processScripts(Processor.java:90)
    at org.jenkinsci.plugins.postbuildscript.processor.Processor.process(Processor.java:79)
    at org.jenkinsci.plugins.postbuildscript.processor.Processor.process(Processor.java:73)
    at org.jenkinsci.plugins.postbuildscript.PostBuildScript.perform(PostBuildScript.java:116)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:21)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:808)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:757)
    at hudson.model.Build$BuildExecution.post2(Build.java:179)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:701)
    at hudson.model.Run.execute(Run.java:1914)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:100)
    at hudson.model.Executor.run(Executor.java:433)
Build step 'Execute scripts' changed build result to UNSTABLE
Notifying upstream projects of job completion
No emails were triggered.
Finished: UNSTABLE

这需要管理员的脚本批准。

解决方案二:使用插件自动检测并设置构建状态

另一种更简化的方法是利用 Jenkins 插件来自动检测并设置构建状态。例如,可以使用 "Text-finder" 插件或 "Log Parser" 插件来扫描测试日志,查找预期失败的标记(如 "XFAIL"),并根据结果将构建状态设置为 "UNSTABLE"。这种方法不需要编写复杂的脚本,只需要简单地配置插件并设置适当的规则即可。

  • 使用 "Text-finder" 插件:
  1. 在 Jenkins 作业配置页面中,找到 "构建后操作" 部分。
  2. 添加一个 "Text Finder" 步骤。
  3. 在 "Find text" 字段中输入 "XFAIL",并选择 "Mark build as unstable" 选项。

这将在构建后操作中检查测试日志中是否包含 "XFAIL" 标记。如果存在,则将构建状态设置为 "UNSTABLE"。

  • 使用 "Log Parser" 插件:
  1. 安装并配置 Jenkins "Log Parser" 插件。
  2. 在 Jenkins 作业配置页面中,找到 "构建后操作" 部分。
  3. 添加一个 "Log Parser" 步骤。
  4. 在 "Parsing Rules" 部分,设置规则以匹配 "XFAIL" 或其他您期望的标记,并将构建状态设置为 "UNSTABLE"。

总结:更精准的构建状态反映项目质量

通过解决预期失败测试与构建状态之间的关系,我们可以更精确地反映项目的质量状况。

无论是使用定制的 Groovy 脚本还是插件,都可以根据项目的需求来选择适合的方法。持续集成的核心目标是尽早发现和解决问题,以确保软件交付的可靠性和稳定性。通过将预期失败的测试情况与构建状态相结合,团队可以更有效地跟踪和管理项目,保障项目的成功交付。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
相关文章
|
6天前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
6天前
|
算法 异构计算
m基于FPGA的电子钟verilog实现,可设置闹钟,包含testbench测试文件
该文介绍了基于FPGA的电子钟设计,利用Vivado2019.2平台进行开发并展示测试结果。电子钟设计采用Verilog硬件描述语言,核心包括振荡器、分频器和计数器。时间显示为2个十进制格式,闹钟功能通过存储器和比较器实现,当当前时间等于设定时间时触发。文中给出了Verilog核心程序示例,展示了时钟信号、设置信号及输出的交互。
50 2
|
6天前
|
测试技术 Docker 容器
使用Docker构建多环境应用:开发、测试、生产环境
Docker已经成为了现代应用程序开发和部署的核心工具之一。通过使用Docker,开发团队可以轻松地在不同的环境中构建、测试和部署应用程序,从而提高开发速度和应用程序的可移植性。本文将介绍如何使用Docker构建多环境应用,包括开发、测试和生产环境,并提供丰富的示例代码,以帮助大家轻松应对不同环境的挑战。
|
6天前
|
jenkins Devops 机器人
【DevOps】(五)Jenkins构建给企业微信推送消息
【DevOps】(五)Jenkins构建给企业微信推送消息
27 1
|
6天前
|
XML Java 测试技术
Maven 构建 & 项目测试
本文介绍了如何使用Maven构建和测试Java应用。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit作为测试框架。执行`mvn clean package`命令进行构建,Maven会清理目标目录,编译源码和测试代码,运行测试用例,最后生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`surefire-reports`文件夹。添加新Java类`Util.java`到项目后,更新`App.java`以使用`Util`类。
|
6天前
|
XML Java 测试技术
Maven 构建 & 项目测试
该文介绍了如何使用Maven进行Java应用的构建与测试。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit依赖。Maven默认创建了源码和测试文件,通过命令`mvn clean package`进行构建,生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告在`surefire-reports`文件夹。新增`Util`类并更新`App`后,执行`mvn clean compile`编译,然后运行`java -cp . com.companyname.bank.App`显示"Hello World!"。
|
6天前
|
分布式计算 Hadoop 测试技术
|
6天前
|
JavaScript API
【vue】分环境构建(开发/测试/生产)配置
【vue】分环境构建(开发/测试/生产)配置
18 1
|
6天前
|
jenkins Shell 持续交付
Jenkins job 创建、参数化、定时构建及时区偏差问题
在Jenkins中创建新任务,步骤:设置任务名,选择自由风格,输入描述并配置丢弃旧构建的规则(保留最近3次)。接着,参数化构建过程,添加字符参数并设定其名称、默认值和描述。在构建触发器中,设定定时构建为每2分钟一次(H2/ * * * *)。在构建阶段执行Shell命令,打印参数param。构建结果显示每2分钟执行一次,保留最近3次构建,参数默认值为Jenkins。定时构建的cron语法详解,并给出常见定时构建示例。当遇到Jenkins显示时间与系统时间不一致(UTC时间差8小时)的问题,解决办法是在Docker启动时添加参数调整时区至上海,确认时区修改成功后,构建历史时间将与系统时间同步。
22 2
|
6天前
|
Linux Go iOS开发
GitLab Runner全解析:深入了解构建、测试和部署的关键执行者
GitLab Runner全解析:深入了解构建、测试和部署的关键执行者
43 0
GitLab Runner全解析:深入了解构建、测试和部署的关键执行者