Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF と Appium をもちいた
Android アプリの自動テスト
2016/02/06(Sat)
平田 敏之@DeNA
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
 平田 敏之
⁃ DeNA (2013/04- )
• 以前はGWの開発・テストやスマホアプリの開発・テストなど
⁃ SWET G 所属
• Software Engineer in Test
⁃ http://www.slideshare.net/masaki/dena-software-engineer-in-test
• 主にスマホアプリ周りを担当
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の流れ
 Androidアプリの自動テストにおける課題
 Androidアプリの自動テスト / デモ
⁃ Appium
 自動テストの実行環境 / デモ
⁃ STF + Jenkins
 デモ
 まとめ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリの自動テストにおける課題
 自動テストに何を使うか?
⁃ 最近は選択肢が増えており用途に応じて使い分けるのが良い
 自動テストを実行する環境のよくある制約
⁃ テストを実行する環境に端末が接続されてないといけない
⁃ 端末でテストが実行されているかの判断をしないといけない
• 「Selenium実践入門」のP365-366にも同様のことを書いています。
[求む]
端末のリモートデバッグ・端末の管理をしてくれるサービス
「特定のメーカーの端末で」「API Level 18以上の端末全て」
に自動テストを実行!とかをしたい!!
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリの自動テスト
 自動テスト書いていますか?
 何を使っていますか?
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Androidアプリの自動テスト
 JUnit4
 Robolectric
 Espresso
 UI Automator
 Appium
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Appium
Appium Client
Test Script
(Ruby / Java etc)
Appium Server
(node)
UI Automator
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 / サンプルアプリ
サンプルコード(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")
Layout (全てにidがふられています)
<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” />
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Appium / デモ(MERY)
世に出ているアプリでの動作例
• 対象アプリMERY
• テストケース
• loginをしてusernameを確認
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストの実行環境
 自動テストを動かす環境どうしてますか?
 手元で動かしていますか?
 Jenkinsで動かしていても制約がありませんか?
⁃ 端末が全てJenkinsに接続されている。
⁃ 自動テストを実行する端末を固定化している。
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF(Smartphone Test Farm) / Device Farm
 ブラウザから端末を操作することができる
 リモートデバッグができる etc etc
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF / デモ
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STFの新機能@2.0.0
 自動テストでの利用も考え、APIを追加。
⁃ 端末のstatus(利用中 / オンライン etc)が取得/変更可能
⁃ 端末の情報(OS / Model etc)が取得可能
Copyright © DeNA Co.,Ltd. All Rights Reserved.
STF / APIサンプル
 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":"C
hrome","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.97124767
3034668,"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":n
ull,"phone":{"iccid":null,"imei":"359250051959219","network":"UNKNOWN","phoneNumber":null},"platform":"Androi
d","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,"sta
tusChangedAt":"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}]}
https://github.com/openstf/stf/blob/2.0.0/doc/API.md
Copyright © DeNA Co.,Ltd. All Rights Reserved.
デモ / STF + Jenkins + Appium + Docker
デモ動画
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
 Androidアプリの自動テストは
⁃ STF + Jenkins + Appium + Docker
 是非、STF@2.0.0のAPIをご利用ください!
 STF用のJenkins pluginを現在開発中です。
⁃ 公開をお待ち下さい!!
開発中
Copyright © DeNA Co.,Ltd. All Rights Reserved.
最後に
さらに先に進むために
 SWET Gは人材を募集しております!!
⁃ (特に)クライアント周りをがっつりやりたい人
は是非!

STFとAppiumをもちいたAndroidアプリの自動テスト

  • 1.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF と Appium をもちいた Android アプリの自動テスト 2016/02/06(Sat) 平田 敏之@DeNA
  • 2.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自己紹介  平田 敏之 ⁃ DeNA (2013/04- ) • 以前はGWの開発・テストやスマホアプリの開発・テストなど ⁃ SWET G 所属 • Software Engineer in Test ⁃ http://www.slideshare.net/masaki/dena-software-engineer-in-test • 主にスマホアプリ周りを担当
  • 3.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 今日の流れ  Androidアプリの自動テストにおける課題  Androidアプリの自動テスト / デモ ⁃ Appium  自動テストの実行環境 / デモ ⁃ STF + Jenkins  デモ  まとめ
  • 4.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリの自動テストにおける課題  自動テストに何を使うか? ⁃ 最近は選択肢が増えており用途に応じて使い分けるのが良い  自動テストを実行する環境のよくある制約 ⁃ テストを実行する環境に端末が接続されてないといけない ⁃ 端末でテストが実行されているかの判断をしないといけない • 「Selenium実践入門」のP365-366にも同様のことを書いています。 [求む] 端末のリモートデバッグ・端末の管理をしてくれるサービス 「特定のメーカーの端末で」「API Level 18以上の端末全て」 に自動テストを実行!とかをしたい!!
  • 5.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリの自動テスト  自動テスト書いていますか?  何を使っていますか?
  • 6.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Androidアプリの自動テスト  JUnit4  Robolectric  Espresso  UI Automator  Appium
  • 7.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium Appium Client Test Script (Ruby / Java etc) Appium Server (node) UI Automator SmartPhone テスト対象アプリ Architecture  iOS/Androidに対応  Native App/ Hybrid App / Mobile Webに対応 ⁃ アプリが手に入ればOK  Ruby / Java / javascript(node.js) などでテスト コードの記述が可能 ⁃ RspecやJunitなど慣れたTesting Framework を使える
  • 8.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium / サンプルアプリ サンプルコード(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") Layout (全てにidがふられています) <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” /> デモ動画
  • 9.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Appium / デモ(MERY) 世に出ているアプリでの動作例 • 対象アプリMERY • テストケース • loginをしてusernameを確認 デモ動画
  • 10.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自動テストの実行環境  自動テストを動かす環境どうしてますか?  手元で動かしていますか?  Jenkinsで動かしていても制約がありませんか? ⁃ 端末が全てJenkinsに接続されている。 ⁃ 自動テストを実行する端末を固定化している。
  • 11.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF(Smartphone Test Farm) / Device Farm  ブラウザから端末を操作することができる  リモートデバッグができる etc etc
  • 12.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF / デモ デモ動画
  • 13.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STFの新機能@2.0.0  自動テストでの利用も考え、APIを追加。 ⁃ 端末のstatus(利用中 / オンライン etc)が取得/変更可能 ⁃ 端末の情報(OS / Model etc)が取得可能
  • 14.
    Copyright © DeNACo.,Ltd. All Rights Reserved. STF / APIサンプル  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":"C hrome","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.97124767 3034668,"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":n ull,"phone":{"iccid":null,"imei":"359250051959219","network":"UNKNOWN","phoneNumber":null},"platform":"Androi d","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,"sta tusChangedAt":"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}]} https://github.com/openstf/stf/blob/2.0.0/doc/API.md
  • 15.
    Copyright © DeNACo.,Ltd. All Rights Reserved. デモ / STF + Jenkins + Appium + Docker デモ動画
  • 16.
    Copyright © DeNACo.,Ltd. All Rights Reserved. まとめ  Androidアプリの自動テストは ⁃ STF + Jenkins + Appium + Docker  是非、STF@2.0.0のAPIをご利用ください!  STF用のJenkins pluginを現在開発中です。 ⁃ 公開をお待ち下さい!! 開発中
  • 17.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 最後に さらに先に進むために  SWET Gは人材を募集しております!! ⁃ (特に)クライアント周りをがっつりやりたい人 は是非!

Editor's Notes

  • #2 第3回 日本Seleniumユーザーコミュニティ勉強会 (注意)デモ動画は全て画像のみとなっております。
  • #9 全てにidがふられているので、簡単に操作をすることができます。
  • #13 実機とブラウザから操作したときのdelayをデモ動画で確認。
  • #16 「STF + Jenkins + Appium + Docker」により「デバイス全て」「特定デバイスのみ」に自動テストをはしらせるということが可能になった。