測試分割

如果測試主體很大或執行時間很長,我們提供將測試分割到多部裝置的選項:分片

測試執行器必須符合先決條件,才能支援分片。

大多數主要測試執行器已支援分片,因此不需要額外作業。這些測試已支援資料分割:檢測設備測試、主機端驅動測試、GTest。

Tradefed 支援兩種分片類型:本機和分散式。 這兩者有些相似之處,因此本頁面會先說明常見屬性,然後再說明各項屬性的具體細節。

常見屬性

兩種形式的分片都假設測試執行器具有相同屬性:分片必須獨立具確定性。這兩種分片方式的第一步都是建構完整的測試排序清單,然後將測試分成不同群組/分片。

分片形式的主要差異在於執行測試的方式。詳情請參閱以下各節。

本機分片

本機分片是指執行分片呼叫的所有裝置,都連線至相同實體主機。

執行

本機分片會建立需要執行的測試集,並讓每個裝置在閒置時 (即完成先前的測試) 輪詢測試,藉此充分運用連線至相同主機的所有裝置。進而提升裝置使用率。這也稱為動態分片

選項

--shard-count XX

分散式分片

分散式分片是指執行分片叫用作業的所有裝置可位於任何位置,並連線至不同的實體主機。

執行

系統會在建構測試清單時進行分散式分片,且每個分片內容只會執行目前要求的分片。因此,所有分散式分片一開始會建構相同的清單,然後執行互斥的子集,進而執行所有測試。

這個表單的主要屬性是分片完全互不瞭解,且可以獨立失敗。

主要缺點是分片長度不一定會平衡,因為我們無法預先預測每個分片中各項測試的執行階段。分配時會盡量讓每個分片中的測試案例數量大致相同。

選項

--shard-count XX --shard-index XX

符記分片

權杖分片只能與本機分片搭配使用。在非本機分片用途中,這個旗標無法運作。有時,參與分片的裝置中,會有其他裝置沒有的特殊資源,例如 SIM 卡。部分測試可能只能在有特殊資源時運作,否則會失敗。

權杖資料分割是這類用途的解決方案。測試模組可以在 AndroidTest.xml 中宣告所需的特殊資源,Tradefed 會將測試路徑導向具有該資源的裝置。

XML 設定

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

權杖的 value 與 Tradefed 的 TokenProperty 相符,且與 TokenProviderHelper 中的處理常式相關聯。

這樣一來,測試模組就能在可正確執行測試的裝置上執行。

如果沒有任何裝置可以執行測試,該怎麼辦?

如果沒有任何可用裝置具備與測試模組相符的資源,測試模組會因無法正常執行而失敗並略過。

舉例來說,如果測試模組要求執行 SIM 卡,但沒有裝置有 SIM 卡,測試模組就會失敗。

實作

將這個功能旗標傳遞至主要的 Tradefed 指令列:

--enable-token-sharding