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

24
Copyright © DeNA Co.,Ltd. All Rights Reserved. Android アアアアアアアアアアア Appium + STF + Jenkins アアアアア Android Testing Bootcamp #2 2016/06/09(Thu) アア アア @DeNA

Upload: toshiyuki-hirata

Post on 16-Apr-2017

1.472 views

Category:

Technology


0 download

TRANSCRIPT

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Android アプリ開発のテスト環境Appium + STF + Jenkins のおはなし

Android Testing Bootcamp #22016/06/09(Thu)

平田 敏之 @DeNA

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

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 環境整備

⁃ テスト基盤環境の開発

⁃ などなど

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

今日の流れ

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

UI テスティングフレームワーク⁃ Appium & デモ

実行環境⁃ STF & デモ

CI⁃ Jenkins

全体のデモ

まとめ

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

本日話さないこと

以下については話しきれませんので省略⁃ 自動テストのテスト戦略⁃ 自動テストの書き方⁃ 自動テストのつらみ⁃ Appium のつらみ⁃ Android 端末の挙動差異のつらみ⁃ Jenkins のつらみ

ここらへんは別の機会に ..

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Android アプリの自動テストってどうしていますか?

テストをどこまで書いていますか?⁃ 手動テストだけになっていませんか?

テストはどこで実行していますか?⁃ 手元にある端末だけで動くとかになっていませんか?

テストの実行環境が固定化されていませんか?⁃ いつも同じ端末で動いていませんか?

テストは並列実行できるようになっていますか?⁃ 実行時間が長くてつらいとかありませんか?

Page 6: 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

以前に比べて環境は整ってきている

Page 7: 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

今日は Appium + STF + Jenkins のお話

※ 注意※用途に応じて使い分けるのが良い

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

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 などが使える

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

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 を使える

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

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 を入力

デモ動画

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

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”));

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Appium / デモ (MERY)

世に出ているアプリでの動作例 • 対象• MERY

• テストケース• login をして username を確認

デモ動画

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

自動テストの実行環境の課題

自動テストを実行する環境の面倒さ⁃ 自動テストを動かす環境に悩んだことはありませんか?

あるあるの例⁃ Jenkins にのせるのが大変なので手元のみで動かしている⁃ Jenkins で動かしているが Jenkins のマシンに接続された端末固

定で動く• 端末を持っていかれてテストが動かなくなった

• 動かしたい端末に交換して動かすなどしている

⁃ 端末側でテストが動いているかわからないので Jenkins 側の設定で頑張っている• Locks とか使っていたり同時ビルド数を 1 にしたりしている

⁃ API Level x 以上の端末だけテスト実行とか Samsung の端末だけテスト実行とかしたいが出来ていない

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

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⁃ 自前で動かすため運用コストはかかる⁃ 今ある資源をいかせる

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

STF(Smartphone Test Farm) / Device Farm

ブラウザから端末を操作することができる リモートデバッグができる etc etc

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

STF / デモ

STF のさくさくさはご自身で STF を動かしてご確認ください

デモ動画

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

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}]}

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

CI 環境

Jenkins⁃ 言わずとしれた定番だが運用コストがかかる⁃ なんでも出来るが Jenkins おじさんも出来やすい⁃ 今の最新バージョンは 2.8

CircleCI⁃ 簡単に利用できる優れもの⁃ 痒いところに手が届かない⁃ [ 未承諾広告 ] 弊社で Enterprise 版を導入しました• 6/10( 金 ) CircleCI Meetup@ ヒカリエ

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Jenkins 2.8 + blueocean plugin

https://jenkins.io/blog/2016/05/26/introducing-blue-ocean/

Jenkins も進化しています

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

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

今回紹介したテスト環境一式⁃ Appium + STF + Jenkins

上記以外に利用しているもの⁃ テストを並列実行させたい• Appium + Docker

⁃ Jenkins で STF を使いやすくしたい• STF + Jenkins Plugin

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

STF 用 Jenkins Plugin API を 1 つ 1 つ毎度叩くのは面倒なので Plugin

化 STF の API の制御を Plugin 側でよしなにしてく

れる

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

デモ / STF + Jenkins + Appium + Docker

自動テストが 2 つの端末で動くデモ動画

デモ動画

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

まとめ

Android アプリ開発のテスト環境は整ってきている⁃ やっていないなら是非やりましょう

プロダクトに併せて利用するテスト環境を選択しましょう

今回紹介したテスト環境⁃ STF + Jenkins + Appium + Docker• 弊社オリジナルは STF 用 Jenkins Plugin のみで、改良後に公開します

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

Copyright © DeNA Co.,Ltd. All Rights Reserved.

最後に

さらに先に進むために

SWET は人材を募集しております!!⁃ 今回話した内容、あえて話してない内容に興味

がある人は是非