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

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

在自动化测试中,有时我们会遇到预期失败的测试情况。这可能是由于功能尚未实现、缺少依赖、环境问题等引起的。在测试框架中,我们可以使用 xfail 标记来标记预期失败的测试用例。然而,如果仅仅将测试标记为预期失败,它在 Jenkins 中将不会影响构建的状态,可能会导致错误的构建结果。我们希望能够根据预期失败的测试情况,适当地调整构建状态,以便更准确地反映项目的质量。

测试脚本中的 xfail 使用:

在执行用例前,先检查当前设备是否联网,没有网络就失败不再继续往下执行:

```python

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 脚本:

```groovy

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

if (logContainsXFail) {

manager.buildFailure()

}

```

执行 Jenkins job 之后报错,如下:

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

在执行构建后,出现了一个错误。org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use。这是因为脚本尚未获得批准使用。

要解决此问题,请按照以下步骤操作:

1. 登录到Jenkins控制台。

2. 点击左侧菜单栏中的“系统管理”。

3. 在“系统管理”页面中,找到并点击“安全性”。

4. 在“安全性”页面中,找到并点击“脚本安全”。

5. 在“脚本安全”页面中,点击“新建脚本审批规则”。

6. 为新规则输入一个名称,然后选择适当的范围(例如,全局或特定项目)。

7. 在“脚本内容”部分,选择“包含”,然后在文本框中输入允许的脚本内容。

8. 点击“保存”按钮以保存新规则。

9. 返回到“PostBuildScript”部分,确保已将新创建的脚本审批规则应用于相应的构建步骤。

10. 保存更改并重新运行构建。现在,构建应该可以正常进行,不再出现之前的错误信息。

更简化的构建状态设置方法:使用插件自动检测并设置构建状态

为了简化构建状态的设置,可以利用 Jenkins 插件来自动检测并设置。以下是两种常用的方法:

1. 使用“Text-finder”插件:

- 在Jenkins作业配置页面中,找到“构建后操作”部分。

- 添加一个“Text Finder”步骤。

- 在“Find text”字段中输入“XFAIL”,并选择“Mark build as unstable”选项。

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

2. 使用“Log Parser”插件:

- 首先安装并配置Jenkins“Log Parser”插件。

- 在Jenkins作业配置页面中,找到“构建后操作”部分。

- 添加一个“Log Parser”步骤。

- 在“Parsing Rules”部分,设置规则以匹配“XFAIL”或其他您期望的标记,并将构建状态设置为“UNSTABLE”。

这两种方法都不需要编写复杂的脚本,只需要简单地配置插件并设置适当的规则即可。通过解决预期失败测试与构建状态之间的关系,我们可以更精确地反映项目的质量状况。无论使用定制的Groovy脚本还是插件,都可以根据项目的需求来选择适合的方法。持续集成的核心目标是尽早发现和解决问题,以确保软件交付的可靠性和稳定性。通过将预期失败的测试情况与构建状态相结合,团队可以更有效地跟踪和管理项目,保障项目的成功交付。