More Related Content
Similar to Androidアプリ開発のテスト環境 (19)
More from Toshiyuki Hirata (7)
Androidアプリ開発のテスト環境
- 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は人材を募集しております!!
⁃ 今回話した内容、あえて話してない内容に興味
がある人は是非