Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリ開発のテスト環境
Appium + STF + Jenkinsのおはなし
Android Testing Bootcamp #2
2016/06/09(Thu)
平田 敏之@DeNA
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
 平田 敏之
⁃ DeNA SWET G (テスト基盤チーム etc) 所属
• SWETとは?
⁃ Software Engineer in Test
• http://www.slideshare.net/masaki/dena-software-engineer-in-test
⁃ ミッション
• DeNAサービス全般の品質向上
• DeNAエンジニアの開発生産性向上
• 私が主にやっていること
⁃ クライアントアプリ周りのテスト戦略、自動テストの開発
⁃ CI/CD環境整備
⁃ テスト基盤環境の開発
⁃ などなど
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の流れ
 最近のAndroidアプリ開発のテスト環境
 UIテスティングフレームワーク
⁃ Appium & デモ
 実行環境
⁃ STF & デモ
 CI
⁃ Jenkins
 全体のデモ
 まとめ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
本日話さないこと
 以下については話しきれませんので省略
⁃ 自動テストのテスト戦略
⁃ 自動テストの書き方
⁃ 自動テストのつらみ
⁃ Appiumのつらみ
⁃ Android端末の挙動差異のつらみ
⁃ Jenkinsのつらみ
ここらへんは別の機会に..
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリの自動テストってどうしていますか?
 テストをどこまで書いていますか?
⁃ 手動テストだけになっていませんか?
 テストはどこで実行していますか?
⁃ 手元にある端末だけで動くとかになっていませんか?
 テストの実行環境が固定化されていませんか?
⁃ いつも同じ端末で動いていませんか?
 テストは並列実行できるようになっていますか?
⁃ 実行時間が長くてつらいとかありませんか?
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリ開発をとりまくテスト環境(の一例)
UIテスティングフレームワーク 実行環境 CI
Espresso Genymotion Jenkins
UI Automator AWS Device Farm CircleCI
Appium Firebase Test Lab
STF
以前に比べて環境は整ってきている
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリ開発をとりまくテスト環境(の一例)
UIテスティングフレームワーク 実行環境 CI
Espresso Genymotion Jenkins
UI Automator AWS Device Farm CircleCI
Appium Firebase Test Lab
STF
今日はAppium + STF + Jenkinsのお話
※注意※
用途に応じて使い分けるのが良い
Copyright © DeNA Co.,Ltd. All Rights Reserved.
UIテスティングフレームワーク
 Espresso
⁃ アプリと同じプロジェクト内にテストコードを書く
⁃ ボタンなどの指定は楽
• [悲報] Test RecorderはAndroid Studio2.2(Preview2)に入らず
• 6/9にリリースされたAndroid Studio2.2(Preview3)に入りました
 UI Automator
⁃ 対象となるアプリ以外の制御も可能
⁃ API Level 18以上で利用できる
⁃ ボタンなどのidを調べるにはUI Automator Viewerを使用
 Appium
⁃ iOS / Androidに対応
⁃ RspecやJUnitなどが使える
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Appium
Appium Client
Test Script
(Ruby / Java etc)
Appium Server
(node)
UI Automator
/Selendroid
SmartPhone
テスト対象アプリ
Architecture  iOS/Androidに対応
 Native App/ Hybrid App / Mobile Webに対応
⁃ アプリが手に入ればOK
 Ruby / Java / javascript(node.js) などでテスト
コードの記述が可能
⁃ RspecやJunitなど慣れたTesting Framework
を使える
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Appium / サンプルアプリ
Layout
<Button
….
android:id=“@+id/button_sample_1” />
<Button
….
android:id=“@+id/button_sample_2” />
<EditText
….
android:id=“@+id/text_1” />
<EditText
….
android:id=“@+id/text_2” />
Action
1. SAMPLE1をclick
2. SAMPLE2をclick
3. 上のEditTextに1を入力
4. 下のEditTextに2を入力
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Appium & Espresso サンプルコード
Ruby w/appium_lib
- button("com.thirata.appium_sample:id/button_sample_1").click
- find("com.thirata.appium_sample:id/button_sample_2").click
- textfield_exact(com.thirata.appium_sample:id/text_1").type 1
- textfields[1].send_keys("2")
Appium
Espresso
- onView(ViewMatchers.withId(R.id.sample_btn1).perform(ViewActions.click());
- onView(ViewMatchers.withId(R.id.sample_btn2).perform(ViewActions.click());
- onView(ViewMatchers.withId(R.id.sample_text1).perform(ViewActions.replaceText(“1”));
- onView(ViewMatchers.withId(R.id.sample_text1).perform(ViewActions.replaceText(“2”));
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Appium / デモ(MERY)
世に出ているアプリでの動作例
• 対象
• MERY
• テストケース
• loginをしてusernameを確認
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストの実行環境の課題
 自動テストを実行する環境の面倒さ
⁃ 自動テストを動かす環境に悩んだことはありませんか?
 あるあるの例
⁃ Jenkinsにのせるのが大変なので手元のみで動かしている
⁃ Jenkinsで動かしているがJenkinsのマシンに接続された端末固定
で動く
• 端末を持っていかれてテストが動かなくなった
• 動かしたい端末に交換して動かすなどしている
⁃ 端末側でテストが動いているかわからないのでJenkins側の設定で
頑張っている
• Locksとか使っていたり同時ビルド数を1にしたりしている
⁃ API Level x以上の端末だけテスト実行とかSamsungの端末だけテ
スト実行とかしたいが出来ていない
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストの実行環境
 AWS Device Farm
⁃ 利用できるテスティングフレームワークが限られている
• Appium Java(Junit / TestNG) / Python
• Calabash
• Instrumentation (JUnit, Espresso, Robotium, or any instrumentation-based tests)
• UI Automator
• Explorer
 Firebase Test Lab for Android
⁃ 利用できるテスティングフレームワークが限られている
• Espresso
• Robotium
• UI Automator 2.0
• instrumentation
 STF
⁃ 自前で動かすため運用コストはかかる
⁃ 今ある資源をいかせる
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF(Smartphone Test Farm) / Device Farm
 ブラウザから端末を操作することができる
 リモートデバッグができる etc etc
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF / デモ
STFのさくさくさはご自身でSTFを動かしてご確認ください
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STFの機能@2.0.0(beta)
 自動テストでの利用も考えAPIを追加
⁃ 例)
• 端末のstatus(利用中 / オンライン etc)の取得・変更
• 端末の情報(OS / Model etc)の取得
 GET /api/v1/devices (端末一覧)
Curl Sample
curl -H "Authorization: Bearer OAUTH-TOKEN"
https://stf.example.org/api/v1/devices
Response Sample
{"success":true,"devices":[{"abi":"armeabi-
v7a","airplaneMode":false,"battery":{"health":"good","level":100,"scale":100,"source":"usb","status":"full","temp":27.6,"voltage":
4.348},"browser":{"apps":[{"id":"com.android.chrome/com.google.android.apps.chrome.Main","name":"Chrome","selected":true,
"system":true,"type":"chrome","developer":"Google
Inc."}],"selected":true},"channel":"d7V3Zoo5B2Kc6MdCrbsvcBABG+w=","createdAt":"2016-01-
26T11:29:20.444Z","display":{"density":3,"fps":60,"height":1920,"id":0,"rotation":0,"secure":true,"size":4.971247673034668,"ur
l":"ws://localhost:7400","width":1080,"xdpi":442.45098876953125,"ydpi":443.3450012207031,"inches":5},"manufacturer":"LGE
","model":"Nexus
5","network":{"connected":true,"failover":false,"roaming":false,"subtype":"","type":"WIFI"},"operator":null,"owner":null,"phone":
{"iccid":null,"imei":"359250051959219","network":"UNKNOWN","phoneNumber":null},"platform":"Android","presenceChangedAt"
:"2016-02-
01T03:36:13.365Z","present":true,"product":"hammerhead","provider":{"channel":"xxxxxx","name":"xxxxxx"},"ready":true,"rem
oteConnect":false,"remoteConnectUrl":null,"reverseForwards":[],"sdk":"19","serial":"xxxxx","status":3,"statusChangedAt":"2016-
02-01T03:36:13.216Z","version":"4.4.2","name":"Nexus 5","releasedAt":"2013-11-
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI環境
 Jenkins
⁃ 言わずとしれた定番だが運用コストがかかる
⁃ なんでも出来るがJenkinsおじさんも出来やすい
⁃ 今の最新バージョンは2.8
 CircleCI
⁃ 簡単に利用できる優れもの
⁃ 痒いところに手が届かない
⁃ [未承諾広告] 弊社でEnterprise版を導入しました
• 6/10(金) CircleCI Meetup@ヒカリエ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkins 2.8 + blueocean plugin
https://jenkins.io/blog/2016/05/26/introducing-blue-ocean/
Jenkinsも進化しています
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリ開発のテスト環境
 今回紹介したテスト環境一式
⁃ Appium + STF + Jenkins
上記以外に利用しているもの
⁃ テストを並列実行させたい
• Appium + Docker
⁃ JenkinsでSTFを使いやすくしたい
• STF + Jenkins Plugin
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF用Jenkins Plugin
 APIを1つ1つ毎度叩くのは面倒なのでPlugin化
 STFのAPIの制御をPlugin側でよしなにしてくれる
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デモ / STF + Jenkins + Appium + Docker
自動テストが2つの端末で動くデモ動画
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
 Androidアプリ開発のテスト環境は整ってきている
⁃ やっていないなら是非やりましょう
 プロダクトに併せて利用するテスト環境を選択しましょう
 今回紹介したテスト環境
⁃ STF + Jenkins + Appium + Docker
• 弊社オリジナルはSTF用Jenkins Pluginのみで、改良後に公開します
Copyright © DeNA Co.,Ltd. All Rights Reserved.
最後に
さらに先に進むために
 SWETは人材を募集しております!!
⁃ 今回話した内容、あえて話してない内容に興味
がある人は是非

Androidアプリ開発のテスト環境

  • 1.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリ開発のテスト環境 Appium + STF + Jenkinsのおはなし Android Testing Bootcamp #2 2016/06/09(Thu) 平田 敏之@DeNA
  • 2.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自己紹介  平田 敏之 ⁃ DeNA SWET G (テスト基盤チーム etc) 所属 • SWETとは? ⁃ Software Engineer in Test • http://www.slideshare.net/masaki/dena-software-engineer-in-test ⁃ ミッション • DeNAサービス全般の品質向上 • DeNAエンジニアの開発生産性向上 • 私が主にやっていること ⁃ クライアントアプリ周りのテスト戦略、自動テストの開発 ⁃ CI/CD環境整備 ⁃ テスト基盤環境の開発 ⁃ などなど
  • 3.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 今日の流れ  最近のAndroidアプリ開発のテスト環境  UIテスティングフレームワーク ⁃ Appium & デモ  実行環境 ⁃ STF & デモ  CI ⁃ Jenkins  全体のデモ  まとめ
  • 4.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 本日話さないこと  以下については話しきれませんので省略 ⁃ 自動テストのテスト戦略 ⁃ 自動テストの書き方 ⁃ 自動テストのつらみ ⁃ Appiumのつらみ ⁃ Android端末の挙動差異のつらみ ⁃ Jenkinsのつらみ ここらへんは別の機会に..
  • 5.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリの自動テストってどうしていますか?  テストをどこまで書いていますか? ⁃ 手動テストだけになっていませんか?  テストはどこで実行していますか? ⁃ 手元にある端末だけで動くとかになっていませんか?  テストの実行環境が固定化されていませんか? ⁃ いつも同じ端末で動いていませんか?  テストは並列実行できるようになっていますか? ⁃ 実行時間が長くてつらいとかありませんか?
  • 6.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリ開発をとりまくテスト環境(の一例) UIテスティングフレームワーク 実行環境 CI Espresso Genymotion Jenkins UI Automator AWS Device Farm CircleCI Appium Firebase Test Lab STF 以前に比べて環境は整ってきている
  • 7.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリ開発をとりまくテスト環境(の一例) UIテスティングフレームワーク 実行環境 CI Espresso Genymotion Jenkins UI Automator AWS Device Farm CircleCI Appium Firebase Test Lab STF 今日はAppium + STF + Jenkinsのお話 ※注意※ 用途に応じて使い分けるのが良い
  • 8.
    Copyright © DeNACo.,Ltd. All Rights Reserved. UIテスティングフレームワーク  Espresso ⁃ アプリと同じプロジェクト内にテストコードを書く ⁃ ボタンなどの指定は楽 • [悲報] Test RecorderはAndroid Studio2.2(Preview2)に入らず • 6/9にリリースされたAndroid Studio2.2(Preview3)に入りました  UI Automator ⁃ 対象となるアプリ以外の制御も可能 ⁃ API Level 18以上で利用できる ⁃ ボタンなどのidを調べるにはUI Automator Viewerを使用  Appium ⁃ iOS / Androidに対応 ⁃ RspecやJUnitなどが使える
  • 9.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium Appium Client Test Script (Ruby / Java etc) Appium Server (node) UI Automator /Selendroid SmartPhone テスト対象アプリ Architecture  iOS/Androidに対応  Native App/ Hybrid App / Mobile Webに対応 ⁃ アプリが手に入ればOK  Ruby / Java / javascript(node.js) などでテスト コードの記述が可能 ⁃ RspecやJunitなど慣れたTesting Framework を使える
  • 10.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium / サンプルアプリ Layout <Button …. android:id=“@+id/button_sample_1” /> <Button …. android:id=“@+id/button_sample_2” /> <EditText …. android:id=“@+id/text_1” /> <EditText …. android:id=“@+id/text_2” /> Action 1. SAMPLE1をclick 2. SAMPLE2をclick 3. 上のEditTextに1を入力 4. 下のEditTextに2を入力 デモ動画
  • 11.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium & Espresso サンプルコード Ruby w/appium_lib - button("com.thirata.appium_sample:id/button_sample_1").click - find("com.thirata.appium_sample:id/button_sample_2").click - textfield_exact(com.thirata.appium_sample:id/text_1").type 1 - textfields[1].send_keys("2") Appium Espresso - onView(ViewMatchers.withId(R.id.sample_btn1).perform(ViewActions.click()); - onView(ViewMatchers.withId(R.id.sample_btn2).perform(ViewActions.click()); - onView(ViewMatchers.withId(R.id.sample_text1).perform(ViewActions.replaceText(“1”)); - onView(ViewMatchers.withId(R.id.sample_text1).perform(ViewActions.replaceText(“2”));
  • 12.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium / デモ(MERY) 世に出ているアプリでの動作例 • 対象 • MERY • テストケース • loginをしてusernameを確認 デモ動画
  • 13.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自動テストの実行環境の課題  自動テストを実行する環境の面倒さ ⁃ 自動テストを動かす環境に悩んだことはありませんか?  あるあるの例 ⁃ Jenkinsにのせるのが大変なので手元のみで動かしている ⁃ Jenkinsで動かしているがJenkinsのマシンに接続された端末固定 で動く • 端末を持っていかれてテストが動かなくなった • 動かしたい端末に交換して動かすなどしている ⁃ 端末側でテストが動いているかわからないのでJenkins側の設定で 頑張っている • Locksとか使っていたり同時ビルド数を1にしたりしている ⁃ API Level x以上の端末だけテスト実行とかSamsungの端末だけテ スト実行とかしたいが出来ていない
  • 14.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自動テストの実行環境  AWS Device Farm ⁃ 利用できるテスティングフレームワークが限られている • Appium Java(Junit / TestNG) / Python • Calabash • Instrumentation (JUnit, Espresso, Robotium, or any instrumentation-based tests) • UI Automator • Explorer  Firebase Test Lab for Android ⁃ 利用できるテスティングフレームワークが限られている • Espresso • Robotium • UI Automator 2.0 • instrumentation  STF ⁃ 自前で動かすため運用コストはかかる ⁃ 今ある資源をいかせる
  • 15.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF(Smartphone Test Farm) / Device Farm  ブラウザから端末を操作することができる  リモートデバッグができる etc etc
  • 16.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF / デモ STFのさくさくさはご自身でSTFを動かしてご確認ください デモ動画
  • 17.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STFの機能@2.0.0(beta)  自動テストでの利用も考えAPIを追加 ⁃ 例) • 端末のstatus(利用中 / オンライン etc)の取得・変更 • 端末の情報(OS / Model etc)の取得  GET /api/v1/devices (端末一覧) Curl Sample curl -H "Authorization: Bearer OAUTH-TOKEN" https://stf.example.org/api/v1/devices Response Sample {"success":true,"devices":[{"abi":"armeabi- v7a","airplaneMode":false,"battery":{"health":"good","level":100,"scale":100,"source":"usb","status":"full","temp":27.6,"voltage": 4.348},"browser":{"apps":[{"id":"com.android.chrome/com.google.android.apps.chrome.Main","name":"Chrome","selected":true, "system":true,"type":"chrome","developer":"Google Inc."}],"selected":true},"channel":"d7V3Zoo5B2Kc6MdCrbsvcBABG+w=","createdAt":"2016-01- 26T11:29:20.444Z","display":{"density":3,"fps":60,"height":1920,"id":0,"rotation":0,"secure":true,"size":4.971247673034668,"ur l":"ws://localhost:7400","width":1080,"xdpi":442.45098876953125,"ydpi":443.3450012207031,"inches":5},"manufacturer":"LGE ","model":"Nexus 5","network":{"connected":true,"failover":false,"roaming":false,"subtype":"","type":"WIFI"},"operator":null,"owner":null,"phone": {"iccid":null,"imei":"359250051959219","network":"UNKNOWN","phoneNumber":null},"platform":"Android","presenceChangedAt" :"2016-02- 01T03:36:13.365Z","present":true,"product":"hammerhead","provider":{"channel":"xxxxxx","name":"xxxxxx"},"ready":true,"rem oteConnect":false,"remoteConnectUrl":null,"reverseForwards":[],"sdk":"19","serial":"xxxxx","status":3,"statusChangedAt":"2016- 02-01T03:36:13.216Z","version":"4.4.2","name":"Nexus 5","releasedAt":"2013-11-
  • 18.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CI環境  Jenkins ⁃ 言わずとしれた定番だが運用コストがかかる ⁃ なんでも出来るがJenkinsおじさんも出来やすい ⁃ 今の最新バージョンは2.8  CircleCI ⁃ 簡単に利用できる優れもの ⁃ 痒いところに手が届かない ⁃ [未承諾広告] 弊社でEnterprise版を導入しました • 6/10(金) CircleCI Meetup@ヒカリエ
  • 19.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Jenkins 2.8 + blueocean plugin https://jenkins.io/blog/2016/05/26/introducing-blue-ocean/ Jenkinsも進化しています
  • 20.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリ開発のテスト環境  今回紹介したテスト環境一式 ⁃ Appium + STF + Jenkins 上記以外に利用しているもの ⁃ テストを並列実行させたい • Appium + Docker ⁃ JenkinsでSTFを使いやすくしたい • STF + Jenkins Plugin
  • 21.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF用Jenkins Plugin  APIを1つ1つ毎度叩くのは面倒なのでPlugin化  STFのAPIの制御をPlugin側でよしなにしてくれる
  • 22.
    Copyright © DeNACo.,Ltd. All Rights Reserved. デモ / STF + Jenkins + Appium + Docker 自動テストが2つの端末で動くデモ動画 デモ動画
  • 23.
    Copyright © DeNACo.,Ltd. All Rights Reserved. まとめ  Androidアプリ開発のテスト環境は整ってきている ⁃ やっていないなら是非やりましょう  プロダクトに併せて利用するテスト環境を選択しましょう  今回紹介したテスト環境 ⁃ STF + Jenkins + Appium + Docker • 弊社オリジナルはSTF用Jenkins Pluginのみで、改良後に公開します
  • 24.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 最後に さらに先に進むために  SWETは人材を募集しております!! ⁃ 今回話した内容、あえて話してない内容に興味 がある人は是非