androidアプリ開発のテスト環境
TRANSCRIPT
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Android アプリ開発のテスト環境Appium + STF + Jenkins のおはなし
Android Testing Bootcamp #22016/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 ClientTest 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 Samplecurl -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,"url":"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,"remoteConnect":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-14T15:00:00.000Z","image":"Nexus_5.jpg","cpu":{"cores":4,"freq":2.26,"name":"Qualcomm Snapdragon 800 MSM8974"},"memory":{"ram":2048,"rom":32768},"using":false}]}
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 は人材を募集しております!!⁃ 今回話した内容、あえて話してない内容に興味
がある人は是非