配置分片

本頁介紹如何透過分片對套件模組 ( AndroidTest.xml ) 進行調整,並在實驗室連續執行期間獲得最佳速度效能。我們將嘗試以通用方式描述這些選項以及使用每個選項的基本原理。

在實驗室中連續運行套件時,該套件通常會跨多個裝置進行分片,以減少整體完成時間。該工具通常會嘗試平衡每個分片的執行時間,以最大限度地縮短總體完成時間(當最後一個分片完成時);但由於某些測試的性質,我們並不總是有足夠的內省,需要模組所有者調整某些行為。

可分片還是不可分片?

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

在典型的模組中,讓線束對模組進行分片(預設行為)是正確的做法。但在某些情況下,您可能想要覆蓋該行為:

  • 當模組的設置成本昂貴時:

對模組進行分片會導致準備工作(安裝 APK、推送檔案等)可能在每個涉及的裝置上執行一次。如果您的模組設定又長又昂貴,並且與測試的運行時相比不值得複製,那麼您應該將您的模組標記為不可分片。

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

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

儀器測試:最大分片數量?

在我們實際安裝並執行 APK 之前,透過AndroidJUnitTest執行的插裝測試不會向工具暴露有多少測試是插裝的一部分。這些操作成本高昂,並且無法在套件的所有模組部分的分片時執行。

線束可能會對儀器測試進行過度分片,並最終產生一些空分片;將儀器測試分片為 6 個分片,其中包含 5 個測試,結果是 5 個分片有 1 個測試,1 個分片沒有測試。每個分片都需要昂貴的 APK 安裝。

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

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

這允許您指定儀器可以分片的最大次數,無論調用等級請求的分片數量如何。預設情況下,偵測將被分成呼叫請求的分片數量。

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