为了测试 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
的示例:
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 构建器中运行。在这种情况下,您必须将其添加到构建图,以便其中一个构建器运行它;或者,如果测试在可选构建器中运行,则必须手动选择用于运行测试的 tryjob。
如果关联的 build 已完成,您应该会在 passes
、flakes
或 failures
步骤之一下看到类似 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 测试软件包和主机测试可执行文件)相乘。将乘以的测试套件中的所有测试用例。
不能在测试套件中使用单个测试用例。