如果測試語料庫較大或執行時間過長,我們提供將測試分割成多部裝置的功能,即「資料分割」。
分割作業有先決條件,測試執行程式才能支援分割作業。
大多數的主要測試執行器皆已支援資料分割,因此無須進行額外工作。上述項目已支援資料分割,包括檢測設備測試、主機端驅動測試、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