为了在 CQ 中测试是否存在不稳定性,基础架构可以多次运行测试,如果有一次测试失败,则整个 build 都会失败。当基础架构确定有少量测试受到被测提交的影响时(根据构建图),系统会自动执行此操作。
格式
更改作者可以通过向提交消息添加 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
在真实更改中的使用示例:
Multiply: driver_development_test
Multiply: ffx_daemon_target_lib_test
Multiply: virtual-keyboard-test
Multiply: text_manager_integration_test: 10
运行次数
默认情况下,基础架构会使用历史测试时长数据来计算运行次数。运行次数的选择是为了生成单个乘法测试分片,其时长与其他分片的预期时长相似,最多可运行 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 构建器中运行。在这种情况下,您必须将其添加到 build 图中,以便由其中一个构建器运行,或者手动选择用于运行测试的 tryjob(如果是在可选构建器中运行)。
如果关联的 build 已完成,您应该会在 passes
、flakes
或 failures
步骤下方看到 multiplied:<shard
name>-<test name>
等步骤。如果 build 尚未完成,您可以点击名为 <builder name>-subbuild
的 build
步骤下的链接,系统会将您定向至子 build build 页面,您应该会在该页面上看到类似的 multiplied
步骤。由于该评论未指定具体测试的倍数,因此您可以查看 build 页面进行确认(如果您对多项测试进行了倍增)。
例如:
最多只能有 5 个匹配的测试
单个乘数不得与超过 5 项测试匹配,以防止更改作者意外地对大量测试进行乘法运算,从而使测试基础架构过载。
如果由于 Multiply
语句与过多测试匹配而导致 tryjob 失败,只需在本地或 Gerrit 界面中修改提交消息,使测试选择器更具体即可。然后重试 CQ。
在 CQ 试运行通过后更改 Multiply
如果所有试作业都已通过 CQ 预演,并且您添加或修改了 Multiply
子句,但未进行任何代码更改,那么在预演后的 24 小时内,后续的 CQ+1 或 CQ+2 尝试将不会重新运行构建器,也不会遵循更新后的 Multiply
子句。
这是因为 CQ 服务会将提交消息更新视为“琐碎”,并且不会使补丁集中之前的 CQ 尝试失效。
如需解决此问题,您可以执行以下任一操作:
- 使用选择 TryJob 菜单手动重试部分 TryJob,并等待它们通过后再提交。
- 或者,通过进行无效的代码更改(例如,向某些代码添加注释)并上传新的补丁集来使旧的 TryJob 结果失效,从而重试所有 TryJob。然后,在存在
Multiply
页脚的情况下重试 CQ。
超时
乘法测试的默认运行次数基于测试的历史时长。如果您更改延长了多次测试的持续时间,默认运行次数可能会过高,导致运行测试的任务超时,并且不会报告任何结果。
在这种情况下,您应手动指定较低的运行次数,以替换默认运行次数,例如:
Multiply: foo_tests: 30
没有测试用例乘数
Multiply
仅支持顶级套件(Fuchsia 测试软件包和主机测试可执行文件)的乘法。乘法测试套件中的所有测试用例都会被乘。
无法在测试套件中对单个测试用例进行多次运行。