测试类型

test 类型定义了构建的桌面和移动测试。 kind.yml 中引用的每个 YAML 文件都定义了关联套件的完整测试集。

基于 kind.yml 中命名的一组 YAML 文件,生成测试的过程如下:

  • 对于每个构建任务,根据构建平台确定相关的测试平台。例如,Windows 2010 构建可能在 Windows 7 和 Windows 10 上进行测试。每个测试平台都指定“测试集”,指示要运行哪些测试。这在名为 test-platforms.yml 的文件中配置。

  • 每个测试集都扩展为要运行的测试列表。这在名为 test-sets.yml 的文件中配置。一个平台可以指定多个测试集,在这种情况下,使用这些测试集的并集。

  • 在名为 tests.yml 的文件中查找每个命名的测试以查找测试描述。此测试描述以平台无关的方式指示测试的作用、如何将其报告给 treeherder 以及如何执行测试。

  • 每个测试描述都转换为一个或多个任务。这是通过 kind.ymltransforms 键定义的一系列转换来执行的。有关更多信息,请参阅 转换

  • 生成的这些任务成为任务图的一部分。

重要

此过程生成所有测试作业,无论树或 try 语法如何。在任务图生成的后期阶段(目标集和优化)中选择将实际执行的测试。

变体

有时我们希望在不同的 Firefox 上下文中运行相同的测试,通常这意味着设置 pref。 variants 概念是为了处理这种情况而发明的。变体是配置的一段,可以合并到每个测试定义中。变体在 variants.yml 文件中定义。请参阅此文件以获取活动变体的最新列表以及它们设置的 pref。

每个变体都必须符合 variant_description_schema

  • **description** (必填) - 解释变体用途的描述。

  • **component** (必填) - 拥有该变体的组件名称。应格式化为 PRODUCT::COMPONENT

  • **expiration** (必填) - 变体过期日期(最多 6 个月)。

  • **suffix** (必填) - 应用于任务标签和 treeherder 符号的后缀。

  • **when** - 一个 json-e 表达式,必须计算结果为 true 才能应用变体。 task 定义作为上下文传递。

  • **replace** - 将覆盖任务定义中键的字典。

  • **merge** - 将使用 merge() 函数合并到任务定义中的字典。

注意

如果这是一个我们支持的发行模式,可以请求例外情况以拥有一个没有过期日期的变体(使用“never”)。如果团队认为他们的变体符合条件,在提交补丁之前,应联系 CI 团队进行讨论。所有例外情况都需要主管批准。

定义变体

可以在测试 YAML 文件中使用 variants 键定义变体。例如

example-suite:
    variants:
        - foo
        - bar

这会将任务分成三个。原始任务、合并了名为“foo”的变体配置的任务以及合并了名为“bar”的变体配置的任务。

复合变体

有时我们希望同时启用多个变体来运行任务。这可以通过“复合变体”来实现。复合变体只是用 + 符号连接的两个或多个变体名称。使用前面的示例,如果我们想同时运行 foobar 变体,我们可以这样做

example-suite:
    variants:
        - foo+bar

这将首先将 foo 的配置合并或替换到任务中,然后是 bar 的配置。如果两个变体都替换了相同的键,则应谨慎。最后一个变体的配置将是使用的配置。

过期变体

理想情况下,当不再需要变体时,应将其删除(即使它尚未过期)。如果您需要延长过期日期,可以提交补丁以修改 variants.yml 文件中的过期日期。变体将在过期日期后不再安排运行。

如果未删除过期的变体,将通知该组件的分类所有者。如果过期的变体持续存在较长时间,autonag 机器人将升级以通知分类所有者的经理和主管。此时,我们将提交一个补丁以从 Taskcluster 和清单条件中删除该变体,以便分类所有者/经理审查。

请订阅 firefox-ci <https://groups.google.com/a/mozilla.com/g/firefox-ci> 组的警报,以便了解 CI、调度或策略的更改。

设置

测试 setting 是测试运行的一组条件。除了块号之外, setting 还唯一地将一个任务与运行相同测试集的其他任务区分开来。构成 setting 的输入有三种类型

  1. 平台 - 描述测试运行的基础平台的信息片段。这包括操作系统和版本、CPU 架构等。

  2. 构建 - 描述正在测试的构建的信息片段。这包括构建类型以及启用了哪些构建属性(如 asanccov 等)。

  3. 运行时 - 描述 Firefox 配置状态的信息片段。这包括 pref 和环境变量。请注意,任务应仅通过变体系统设置运行时配置(请参阅 变体)。

测试settings可在所有测试任务中的task.extra.test-setting对象中获取。它们由set_test_setting()转换函数定义。

完整模式定义在test_setting_description_schema中。

设置哈希

除了三个顶级对象之外,还有一个_hash键,其中包含设置对象其余部分的哈希值。这为使用者提供了一种便捷的方式来对在相同设置下运行的任务进行分组或比较。