在 CQ 中测试不稳定性

为了测试 CQ 中的不稳定情况,基础架构可能会多次运行测试,如果只有一次失败,则整体构建会失败。当基础架构确定有少量测试受到被测试的提交的影响时,系统会自动进行上述操作(根据构建图)。

格式

更改作者可以通过在提交消息中添加 Multiply 页脚,指示基础架构多次运行特定测试:

Multiply: test_selector

test_selector 可以是测试名称、测试名称的子字符串,或与测试名称匹配的 re2 正则表达式

Fuchsia 组件测试通过软件包网址引用:

Multiply: fuchsia-pkg://fuchsia.com/foo_tests#meta/foo_tests.cm

主机测试通过路径引用:

Multiply: host_x64/obj/src/bar_tests.sh

也接受测试名称的子字符串:

Multiply: foo_tests
Multiply: bar_tests

多重维度可以合并成一行(以英文逗号分隔):

Multiply: foo_tests, bar_tests

也接受全大写 MULTIPLY

使用实际更改中的 Multiply 的示例:

运行次数

默认情况下,基础架构使用历史测试时长数据来计算运行次数。选择运行次数以生成一个相乘的测试分片,该测试分片的时长与其他分片的预期时长相似,最多 2, 000 次测试运行。运行速度越慢,测试的运行次数越少,而速度越快的测试运行的次数越多。

有时需要替换默认的运行次数(例如,因为默认值过高并会导致超时)。在这种情况下,您可以明确指定运行次数。例如:

Multiply: foo_tests: 100

限制

验证

如果 Multiply 子句中存在拼写错误,或者 Multiply 选择器与任何构建器上的所有测试都不匹配,则该选择器会静默地使任何测试无法相乘。

因此,请务必手动验证 Multiply 是否已生效。对于 Multiply 生效的每个构建器,以下形式的注释都会添加到 Gerrit 中的更改中:

A builder created multiplier shards. Click the following link for more details:

注释将包含指向运行多重测试的 build 的链接(示例)。

如果未显示此类注释,则可能是语法有误,或者测试无法在任何常规 CQ 构建器中运行。在这种情况下,您必须将其添加到构建图,以便其中一个构建器运行它;或者,如果测试在可选构建器中运行,则必须手动选择用于运行测试的 tryjob。

如果关联的 build 已完成,您应该会在 passesflakesfailures 步骤之一下看到类似 multiplied:<shard name>-<test name> 的步骤。如果构建尚未完成,您可以点击 build 步骤下名为 <builder name>-subbuild 的链接,随后您将进入子 build 构建页面,其中应该会显示类似的 multiplied 步骤。由于注释未指定相乘了哪些测试,因此您可以查看 build 页面进行确认(如果将多个测试相乘)。

例如:

“乘法分片”屏幕截图

不超过 5 个匹配的测试

一个调节系数不能与五个以上的测试匹配,这是为了防止变更作者意外添加大量测试,导致测试基础架构过载。

如果由于 Multiply 语句与过多测试匹配而造成 tryjob 失败,则只需在本地或 Gerrit 界面中修改提交消息,即可使测试选择器更加具体。然后重新尝试 CQ。

在 CQ 试运行通过后更改 Multiply

如果所有 tryjob 都已通过 CQ 试运行,而您添加或修改 Multiply 子句而未更改任何代码,则在试运行后的 24 小时内,后续的 CQ+1 或 CQ+2 尝试将不会重新运行构建器,更新后的 Multiply 子句将不予遵循。

这是因为 CQ 服务将提交消息更新视为“无关紧要”,并且不会使过去对补丁集的 CQ 尝试失效。

如需解决此问题,您可以执行以下任一操作:

  • 使用选择 Tryjobs 菜单手动重试一部分 tryjobs,等待它们通过后再提交。
  • 或者,通过进行非功能性代码更改(例如,为某些代码添加注释)并上传新的补丁集以使旧的 tryjob 结果失效,从而重试所有 tryjobs。然后在显示 Multiply 页脚的情况下重试 CQ。

超时

乘法测试的默认运行计数基于测试的历史时长。如果您的更改增加所乘测试的持续时间,则默认运行计数可能过高,并导致运行测试的任务超时且不报告任何结果。

在这种情况下,您应该通过手动指定较低的运行计数来替换默认的运行计数,例如:

Multiply: foo_tests: 30

无测试用例乘数

Multiply 仅支持顶级套件(Fuchsia 测试软件包和主机测试可执行文件)相乘。将乘以的测试套件中的所有测试用例。

不能在测试套件中使用单个测试用例。