2017-03-03 63 views
12

背景connectedAndroidTest多個模擬器

我想在不同的模擬器上運行詹金斯我的Android儀表測試。假設我有100個測試和4個模擬器,我想對每個測試運行25個測試。

我在詹金斯管道的並行執行./gradlew connectedDebugAndroidTest 4個模擬器

stage('Instrumented Tests') { 
    parallel(
      emu1: { 
       runInstrumentedTestOnEmu(...) 
      }, 
      emu2: { 
       runInstrumentedTestOnEmu(...) 
      } 
      ... 
    ) 
} 

connectedDebugAndroidTest將爲了產生其他命令來設置環境運行儀表測試。

... 
:app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest 
:app:processDebugAndroidTestJavaRes NO-SOURCE 
:app:transformResourcesWithMergeJavaResForDebugAndroidTest 
:app:validateSigningDebugAndroidTest 
:app:packageDebugAndroidTest 
:app:assembleDebugAndroidTest 
:app:connectedDebugAndroidTest 

而當環境已就緒,那麼它performes :app:connectedDebugAndroidTest將開始運行模擬器上測試。

我不想爲所有並行調用運行這些程序(在這種情況下,它將是其中的4個),因爲顯然我多次執行完全相同的工作。理論上,最好的選擇是在parallel之前執行設置,並且一切準備好運行測試,然後進入parallel步驟並在每個仿真器上開始測試。

問題

是否可以執行所有的connectedDebugAndroidTest安裝前步驟而不執行本身?

此外,如果我在4個模擬器上並行運行connectedDebugAndroidTest,則構建崩潰,因爲當其他並行構建已經刪除該文件時,由於gradle嘗試從intermediate目錄讀取文件,導致崩潰。

您可以使用上述設置查看this test project in github

回答

8

是否有可能執行connectedDebugAndroidTest的所有預設置步驟而不執行自己?

是的,你可以運行assembleDebugAndroidTest,其作爲構建日誌顯示,是最後一個先決條件運行設備的測試。運行這將構建應用程序和測試APK。

雖然據我所知,沒有使用時,搖籃跨越多個模擬器分片你的測試的方式 - 你將不得不在兩者中的APK安裝到每一個模擬器,並使用adb shell am instrumentnumShardsshardIndex選項。