配置分片

本頁面描述了可以通過分片來調整套件模塊 ( AndroidTest.xml ) 並在實驗室連續執行期間獲得最佳速度性能的方法。我們將嘗試以通用的方式描述這些選項以及使用每個選項的合理性。

當在實驗室中連續運行一個套件時,該套件通常會在多個設備上分片以減少整體完成時間。該工具通常會嘗試平衡每個分片的執行時間,以最小化整體完成時間(當最後一個分片完成時);但由於某些測試的性質,我們並不總是有足夠的自省,需要模塊所有者來調整一些行為。

可分片還是不可分片?

可以使用<option name="not-shardable" value="true" />標記模塊 ( AndroidTest.xml ) 以通知工具不應該對其進行分片。

在典型的模塊中,讓 Harness 對模塊進行分片(默認行為)是正確的做法。但在某些情況下,您可能希望覆蓋該行為:

  • 當您的模塊設置成本很高時:

對模塊進行分片會導致準備工作(安裝 APK、推送文件等)可能在涉及的每個設備上運行一次。如果與測試運行時相比,您的模塊設置冗長且昂貴且不值得複制,則應將模塊標記為不可分片。

  • 當模塊中的測試數量較少時:

對模塊進行分片會導致所有測試用例可能在不同設備上獨立執行。這與第一點有關;如果您的測試數量很少,您最終可能會在某些分片中進行一次測試或沒有測試,這將使任何準備步驟變得非常昂貴。例如,為單個測試用例安裝 APK 通常是不值得的。

儀器測試:最大分片數?

在我們實際安裝和運行 APK 之前,通過AndroidJUnitTest運行的儀器測試不會向工具公開有多少測試是儀器的一部分。這些操作成本高昂,並且不能在分片時對套件的所有模塊部分執行。

線束可能會過度分片儀器測試並最終得到一些空分片;將具有五個測試的儀器測試分片到六個分片中會導致五個分片有一個測試和一個分片沒有測試。這些分片中的每一個都需要昂貴的 APK 安裝。

因此,當儀器測試 APK 中的測試數量較少時,使用<option name="not-shardable" value="true" />標記模塊將使工具知道分片該模塊是不值得的。

AndroidJUnitTest有一個特殊選項,允許它指定允許分片的最大分片數: <option name="ajur-max-shard" value="5" />

這允許您指定可以對檢測進行分片的最大次數,而不管調用級別請求的分片數量如何。默認情況下,檢測將被分片為調用請求的分片數。

例如,如果您的儀器測試 APK 僅包含兩個測試用例,但您仍想對其進行分片, ajur-max-shard值設置為2將確保您不會創建空分片。