狠狠撸

狠狠撸Share a Scribd company logo
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は人材を募集しております!!
? 今回話した内容、あえて話してない内容に興味
がある人は是非

More Related Content

础苍诲谤辞颈诲アフ?リ开発のテスト环境

  • 1. Copyright ? DeNA Co.,Ltd. All Rights Reserved. Androidアプリ開発のテスト環境 Appium + STF + Jenkinsのおはなし Android Testing Bootcamp #2 2016/06/09(Thu) 平田 敏之@DeNA
  • 2. 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環境整備 ? テスト基盤環境の開発 ? などなど
  • 3. Copyright ? DeNA Co.,Ltd. All Rights Reserved. 今日の流れ ? 最近のAndroidアプリ開発のテスト環境 ? UIテスティングフレームワーク ? Appium & デモ ? 実行環境 ? STF & デモ ? CI ? Jenkins ? 全体のデモ ? まとめ
  • 4. Copyright ? DeNA Co.,Ltd. All Rights Reserved. 本日話さないこと ? 以下については話しきれませんので省略 ? 自動テストのテスト戦略 ? 自動テストの書き方 ? 自動テストのつらみ ? Appiumのつらみ ? Android端末の挙動差異のつらみ ? Jenkinsのつらみ ここらへんは別の機会に..
  • 5. Copyright ? DeNA Co.,Ltd. All Rights Reserved. Androidアプリの自動テストってどうしていますか? ? テストをどこまで書いていますか? ? 手動テストだけになっていませんか? ? テストはどこで実行していますか? ? 手元にある端末だけで動くとかになっていませんか? ? テストの実行環境が固定化されていませんか? ? いつも同じ端末で動いていませんか? ? テストは並列実行できるようになっていますか? ? 実行時間が長くてつらいとかありませんか?
  • 6. Copyright ? DeNA Co.,Ltd. All Rights Reserved. Androidアプリ開発をとりまくテスト環境(の一例) UIテスティングフレームワーク 実行環境 CI Espresso Genymotion Jenkins UI Automator AWS Device Farm CircleCI Appium Firebase Test Lab STF 以前に比べて環境は整ってきている
  • 7. 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のお話 ※注意※ 用途に応じて使い分けるのが良い
  • 8. 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などが使える
  • 9. 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 を使える
  • 10. 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を入力 デモ動画
  • 11. 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”));
  • 12. Copyright ? DeNA Co.,Ltd. All Rights Reserved. Appium / デモ(MERY) 世に出ているアプリでの動作例 ? 対象 ? MERY ? テストケース ? loginをしてusernameを確認 デモ動画
  • 13. Copyright ? DeNA Co.,Ltd. All Rights Reserved. 自動テストの実行環境の課題 ? 自動テストを実行する環境の面倒さ ? 自動テストを動かす環境に悩んだことはありませんか? ? あるあるの例 ? Jenkinsにのせるのが大変なので手元のみで動かしている ? Jenkinsで動かしているがJenkinsのマシンに接続された端末固定 で動く ? 端末を持っていかれてテストが動かなくなった ? 動かしたい端末に交換して動かすなどしている ? 端末側でテストが動いているかわからないのでJenkins側の設定で 頑張っている ? Locksとか使っていたり同時ビルド数を1にしたりしている ? API Level x以上の端末だけテスト実行とかSamsungの端末だけテ スト実行とかしたいが出来ていない
  • 14. 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 ? 自前で動かすため運用コストはかかる ? 今ある資源をいかせる
  • 15. Copyright ? DeNA Co.,Ltd. All Rights Reserved. STF(Smartphone Test Farm) / Device Farm ? ブラウザから端末を操作することができる ? リモートデバッグができる etc etc
  • 16. Copyright ? DeNA Co.,Ltd. All Rights Reserved. STF / デモ STFのさくさくさはご自身でSTFを動かしてご確認ください デモ動画
  • 17. 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-
  • 18. Copyright ? DeNA Co.,Ltd. All Rights Reserved. CI環境 ? Jenkins ? 言わずとしれた定番だが運用コストがかかる ? なんでも出来るがJenkinsおじさんも出来やすい ? 今の最新バージョンは2.8 ? CircleCI ? 簡単に利用できる優れもの ? 痒いところに手が届かない ? [未承諾広告] 弊社でEnterprise版を導入しました ? 6/10(金) CircleCI Meetup@ヒカリエ
  • 19. Copyright ? DeNA Co.,Ltd. All Rights Reserved. Jenkins 2.8 + blueocean plugin https://jenkins.io/blog/2016/05/26/introducing-blue-ocean/ Jenkinsも進化しています
  • 20. Copyright ? DeNA Co.,Ltd. All Rights Reserved. Androidアプリ開発のテスト環境 ? 今回紹介したテスト環境一式 ? Appium + STF + Jenkins 上記以外に利用しているもの ? テストを並列実行させたい ? Appium + Docker ? JenkinsでSTFを使いやすくしたい ? STF + Jenkins Plugin
  • 21. Copyright ? DeNA Co.,Ltd. All Rights Reserved. STF用Jenkins Plugin ? APIを1つ1つ毎度叩くのは面倒なのでPlugin化 ? STFのAPIの制御をPlugin側でよしなにしてくれる
  • 22. Copyright ? DeNA Co.,Ltd. All Rights Reserved. デモ / STF + Jenkins + Appium + Docker 自動テストが2つの端末で動くデモ動画 デモ動画
  • 23. Copyright ? DeNA Co.,Ltd. All Rights Reserved. まとめ ? Androidアプリ開発のテスト環境は整ってきている ? やっていないなら是非やりましょう ? プロダクトに併せて利用するテスト環境を選択しましょう ? 今回紹介したテスト環境 ? STF + Jenkins + Appium + Docker ? 弊社オリジナルはSTF用Jenkins Pluginのみで、改良後に公開します
  • 24. Copyright ? DeNA Co.,Ltd. All Rights Reserved. 最後に さらに先に進むために ? SWETは人材を募集しております!! ? 今回話した内容、あえて話してない内容に興味 がある人は是非