如果測試主體很大或執行時間很長,我們提供將測試分割到多部裝置的選項:分片。
測試執行器必須符合先決條件,才能支援分片。
大多數主要測試執行器已支援分片,因此不需要額外作業。這些測試已支援資料分割:檢測設備測試、主機端驅動測試、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