Gradleで管理されたAndroidProjectのEspressoテストをGenymotionを使ってjenkinsでぐるぐる回すまで(長い)

Table of Contents

Gradleで管理されたAndroidプロジェクトをJenkinsで動かすまで苦しんだのでまとめます。

##環境

  • MacOS 10.8.5
  • Java 1.7
  • Gradle 1.11
  • Android Studio 0.5.3
  • Espresso 1.1
  • Jenkins 1.5558
  • git plugin
  • gradle plugin

###前提

Android StudioでEspressoのテストが

./gradlew connectedAndroidTest

で動いてるものとします。

###諦めたこと

Android Emulator Plugin は諦めました。 なぜか以下のメッセージを出して途中で止まります。

android completed with result NOT_BUILT

動くこともある。動かないこともある。不安定過ぎるのでエミュレーターを断念。

###Genymotionで代用

エミュレーターをGenymotionに置き換えました。 以下Genymotionをjenkinsで呼び出す流れ。

$ VBoxManage list vms

で作成済みのGenymotionのdeviceを表示します。こんな感じ。

"Nexus S - 4.3 - API 18 - 480x800" {209f5db1-6ec1-4dff-9f6f-515a6ece0123}

これのスナップショットを作っておきます。

$ VBoxManage snapshot "Nexus S - 4.3 - API 18 - 480x800" take "factory"

スナップショットができたら、Jenkinsの Item > Build > Execute shell に起動処理を設定します。

VBoxManage snapshot "Nexus S - 4.3 - API 18 - 480x800" restore "factory"
{GENYMOTION_DIR}/player --vm-name "Nexus S - 4.3 - API 18 - 480x800" &
sleep 60

他には、 Item > Source Code Management > Git >

Repository URL : リポジトリのURL
Branch Specifier : */develop とか

Item > User Gradle Wrapper >

Tasks : *connectedAndroidTest*

Item > Post-build Actions > Publish JUnit test result report >

Test report XMLs : **/build/androidTest-results/connected/*.xml

これで動くはずです。(きっと)

##失敗例

  • どんなに設定を変更しても動かなかったが、Itemを作りなおしたらすんなり動いた。
  • テスト対象のブランチが違った。
  • connectedAndroidTest と connectedInstrumentTest を間違えてた
  • Genymotionのデバイスが起動しっぱなし

##参考

AndroidのCIに纏わる諸々の問題 – Rejasupoem

Use Genymotion with Jenkins for Android testing | Genymobile Blog