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

相关文章
|
2月前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
58 1
|
2月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
11天前
|
分布式计算 Shell MaxCompute
odps测试表及大量数据构建测试
odps测试表及大量数据构建测试
|
3月前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
61 3
|
3月前
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
193 0
|
6天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的16psk调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16PSK调制解调系统的硬件测试版本。系统在原有仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比下的性能测试。16PSK通过改变载波相位传输4比特信息,广泛应用于高速数据传输。硬件测试操作详见配套视频。开发板使用及移植方法也一并提供。
23 6
|
12天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的8PSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现8PSK调制解调系统,包含高斯信道、误码率统计、ILA数据采集和VIO在线SNR设置模块。通过硬件测试和Matlab仿真,展示了不同SNR下的星座图。8PSK调制通过改变载波相位传递信息,具有高频谱效率和抗干扰能力。开发板使用及程序移植方法详见配套视频和文档。
24 7
|
19天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的QPSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的QPSK调制解调系统的硬件实现与仿真效果。系统包含测试平台(testbench)、高斯信道模块、误码率统计模块,支持不同SNR设置,并增加了ILA在线数据采集和VIO在线SNR设置功能。通过硬件测试验证了系统在不同信噪比下的性能,提供了详细的模块原理及Verilog代码示例。开发板使用说明和移植方法也一并给出,确保用户能顺利在不同平台上复现该系统。
57 15
|
26天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
65 6
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
48 5