如要在 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_testMultiply: ffx_daemon_target_lib_testMultiply: virtual-keyboard-testMultiply: text_manager_integration_test: 10
執行次數
根據預設,基礎架構會使用歷來測試時間資料計算執行次數。系統會選擇執行次數,產生單一的測試資料分割 (執行時間與其他資料分割的預期時間相近),最多可執行 2000 次測試。速度較慢的測試執行次數較少,速度較快的測試執行次數較多。
有時需要覆寫預設的執行次數 (例如,預設值過高而導致逾時)。在這種情況下,您可以明確指定執行次數。例如:
Multiply: foo_tests: 100
適用性
Multiply 頁尾會套用至所有針對 CL 執行的建構工具,包括 CQ 自動觸發的建構工具,以及使用 Gerrit 中的「Choose Tryjobs」下拉式選單手動觸發的建構工具。
限制
驗證
如果 Multiply 子句有錯字,或 Multiply 選擇器與任何建構工具上的任何測試都不相符,系統會默默地無法複製任何測試。
因此,請務必手動確認 Multiply 是否生效。對於 Multiply 生效的每個建構工具,系統都會在 Gerrit 的變更中新增下列格式的註解:
A builder created multiplier shards. Click the following link for more details:
留言會包含執行多重測試的建構版本連結 (範例)。
如果沒有顯示這類註解,可能是語法有誤,或是測試未在任何一般 CQ 建構工具中執行。在這種情況下,您必須將其新增至建構圖,以便由其中一個建構工具執行,或是手動選擇執行測試的試用作業 (如果測試是在選用建構工具中執行)。
如果連結的建構作業已完成,您應該會在 passes、flakes 或 failures 步驟下方看到類似 multiplied:<shard
name>-<test name> 的步驟。如果建構作業尚未完成,您可以點選「build」步驟下名為「<builder name>-subbuild」的連結,前往子建構版本建構頁面,您應該會看到類似的「multiplied」步驟。由於留言未指定要將哪些測試相乘,您可以查看建構頁面來確認 (如果您將多項測試相乘)。
例如:

最多五項相符的測試
為避免變更作者不慎大量複製測試,導致測試基礎架構不堪負荷,單一乘數不得比對超過五項測試。
如果 Multiply 陳述式比對的測試過多,導致 tryjob 失敗,只要在本地或 Gerrit UI 中編輯提交訊息,讓測試選取器更具體即可。然後重試 CQ。
在 CQ 模擬測試通過後變更 Multiply
如果所有 tryjob 都已通過 CQ 模擬測試,且您新增或編輯 Multiply 子句,但未進行任何程式碼變更,則在模擬測試後 24 小時內,後續的 CQ+1 或 CQ+2 嘗試不會重新執行建構工具,且系統不會採用更新後的 Multiply 子句。
這是因為 CQ 服務會將提交訊息更新視為「微不足道」的變更,不會使修補程式集過去的 CQ 嘗試失效。
如要解決這個問題,請採取下列任一做法:
- 使用「Choose Tryjobs」(選擇 Tryjob) 選單手動重試部分 Tryjob,並等待通過後再提交。
- 或者,您可以進行非功能性程式碼變更 (例如在某些程式碼中新增註解),然後上傳新的修補程式集,使舊的試用作業結果失效,藉此重試所有試用作業。然後重試 CQ,並加入
Multiply頁尾。
逾時
系統會根據測試的歷來時間長度,決定倍增測試的預設執行次數。如果變更會增加測試的執行時間,預設執行次數可能會過高,導致執行測試的作業逾時,且不會回報任何結果。
在這種情況下,您應手動指定較低的執行次數,藉此覆寫預設執行次數,例如:
Multiply: foo_tests: 30
沒有測試案例乘數
Multiply 僅支援頂層套件 (Fuchsia 測試套件和主機測試可執行檔) 的乘法。系統會將已相乘測試套件中的所有測試案例相乘。
您無法在測試套件中複製單一測試案例。