Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017

5,876 views

Published on

システムテスト自動化カンファレンス2017 ( https://testautomationresearch.connpass.com/event/50928/ ) での発表資料です。

Published in: Technology
  • Be the first to comment

快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017

  1. 1. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 2017/03/19 1 西島 寛 快適・簡単・安心な アプリE2Eテストの実行環境
  2. 2. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.2 自己紹介 西島 寛 • 2010年ヤフージャパン入 社 • E2Eテスト基盤開発エンジ ニア • これまではGYAO、トップ ページ、検索プラットフォー ムなどで開発を担当
  3. 3. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 取り上げる話題 • アプリ E2E テスト実行環境の話 3
  4. 4. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 取り上げない話題 • E2E テストの作り方については触れません! 4
  5. 5. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ • ヤフーのアプリ開発について • アプリE2Eテスト実行環境 Applicat の紹介 • 開発の背景 • 自社で作ると決めるまで • Appium をスケールさせるための工夫 • 安定したテスト実行のための工夫 • 他にも... 5
  6. 6. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. ヤフーのアプリ開発 について
  7. 7. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ヤフー・ジャパンのアプリ 7 提供アプリ数 100 以上 ※出典:Yahoo! JAPAN Annual Report 2016
  8. 8. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ヤフー・ジャパンのアプリ 8 累計ダウンロード数 3億8000万 以上※2016年3月末時点 ※出典:App Annie 2015年アプリ市場総括レポート
  9. 9. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 開発体制 開発・運営のメンバーは2000名以上 サービスごとにチームが分離 開発フロー・テストなど多くが権限移譲 9
  10. 10. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アプリの開発・テスト環境 開発 Gitに コミット CI上で単体 テスト &ビルド 社内アプリ 配布サイト にデプロイ ダウンロード して手動テ スト
  11. 11. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. アプリE2Eテスト 実行環境
  12. 12. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. E2Eテスト実行環境 Applicat 開発 GITに コミット CI上で単体 テスト &ビルド 社内アプリ 配布サイト にデプロイ ダウンロード して手動テ スト E2Eテスト
  13. 13. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 開発の背景
  14. 14. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. サービス開発の声 以前からサービスによってはアプリE2Eテス ト自動化は取り組んでいた 14 iOS では Mac が必要だけど 置く場所がない!手動実行じゃなくて CI連携したい! 複数端末で 並列実行したい! 動かす環境によって 結果が安定しない! テストケースの維持が大 変
  15. 15. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 課題 「アプリE2Eテストの実行環境」の整備は大変 15 ビルド • テスト対象のアプリのビルド 端末準備 • テスト実行端末の起動・初期化 テスト実行 • テストスクリプトを実行 結果保存や 共有 • 結果を保存 • PJ関係者に周知 ビルド環境構築が大変 ビルド失敗でテスト失敗に 初期化が大変 毎回同じ環境を作れない 手作業だと忘れる 仕組みをつくるのも大変 並列実行が難しい
  16. 16. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 気づき • アプリのE2Eテストの実行環境整備は サービスの開発と両立しない • 実行環境は全社共通で整備したほうがよ い 16
  17. 17. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 開発の方針 • ヤフーの規模で快適に使える • 簡単にCIツールと連携できる • 安心してテスト実行ができる 17
  18. 18. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Applicat の特徴 • テストフレームワークに Appium を採用 • 複数の端末で並列実行が可能 • テスト実行の前後の処理を工夫し、テストの 実行を安定化 • 昨年9月から運用開始し、現在およそ200件/ 日のテストを実行 18
  19. 19. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 自社開発すると 決めるまで
  20. 20. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. クラウドサービスの利用検討 • Sauce Labs • AWS Device Farm • Xamarin Test Cloud • … 20
  21. 21. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デメリット リリース前のアプリの外部公 開になる 社内ネットワーク上の開発用 APIを使ったテストができない 21 メリット 結果が安定 スケールする 導入までのスピード クラウドサービスの利用検討 自社開発することに
  22. 22. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. フレームワークの選定 テスト記述言語 仕様の安定性 動作の安定性 実績 Appium 主要言語 ◎ ○ ◎ OS 標準 (Espresso/ XCUITest) Java/Swift ? ◎ Espresso ◎ XCUITest △ 22 仕様の安定性と実績から Appium を採用
  23. 23. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. Appiumでのテストを スケールさせる
  24. 24. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Appium とは 24 Appium 端末の排他制御・実行待ち・冗長構成 がスケールさせるために足りない iOS / Android HTTP UIAutomator UI Automation XCUITest テスト実行
  25. 25. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Appium をスケールアウトさせるOSS • Selenium Grid • 複数の Appium へのアクセスを振り分けるロードバ ランサー的なもの • Selenium Project が開発 • Selenium Grid Router • 複数の Selenium Grid へのアクセスを振り分ける ロードバランサー的なもの • ロシアの Yandex が開発 25
  26. 26. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Grid Router – Grid - Appium 26 Grid Router Selenium Grid Appium Appium Selenium Grid Appium 写真:アフロ テスト実行 HTTP
  27. 27. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Grid Router – Grid - Appium 27 Grid Router Selenium Grid Appium Appium Selenium Grid Appium 写真:アフロ テスト実行 HTTP
  28. 28. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Grid Router – Grid - Appium 28 Grid Router Selenium Grid Appium Appium Selenium Grid Appium 写真:アフロ テスト実行 HTTP
  29. 29. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Grid Router – Grid - Appium 29 Grid Router Selenium Grid Appium Appium Selenium Grid Appium 写真:アフロ テスト実行 HTTP
  30. 30. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Grid Router – Grid - Appium 30 Grid / Grid Router では大規模な運用は難しい 単一障害点 Grid Router Selenium Grid Appium Appium Selenium Grid Appiumテスト実行 HTTP フルスクラッチで開発することに
  31. 31. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 開発したテスト実行環境 3131 テスト実行キュー クラスタ Appium / テスト実行 ワーカー
  32. 32. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. テスト実行キュー • テスト実行を Work Queue で管理 • 並列実行 • Worker を増やすことでスケールアウト可能に • 「Android 7 の実機のどれか」といった曖昧な 形でキューに登録 • 少ない端末でやりくり 32
  33. 33. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 整備した環境 3333 アプリ配布 サイト Git リポジトリ CIツール テスト結果ページ 社内チャットに 結果通知 テスト実行キュー Appium / テスト実行 ワーカー Upload app add consume Fetch app Fetch test code • Android 6.0 実機 • Android 7.0 実機 • Android 7.0 エミュレーター でテスト
  34. 34. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 整備した環境 3434 アプリ配布 サイト Git リポジトリ CIツール テスト結果ページ 社内チャットに 結果通知 テスト実行キュー Appium / テスト実行 ワーカー Upload app add consume Fetch app Fetch test code• 使用端末確保 • 端末初期化 • Appium 起動 • テスト実行 • 結果レポート作成
  35. 35. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 整備した環境 3535 アプリ配布 サイト Git リポジトリ CIツール テスト結果ページ 社内チャットに 結果通知 テスト実行キュー Appium / テスト実行 ワーカー Upload app add consume Fetch app Fetch test code テストがおわった
  36. 36. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 安定したテスト実行のた めの工夫
  37. 37. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ビルド • 社内標準のCIツー ル上でビルドされた バイナリでテストを 実行 • iOS は再署名をして テスト実施 37 社内アプリ配信サ イト Applicat テスター
  38. 38. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. iOS アプリを再署名 38 証明書 開発元: ヤフー テスト実行: 不可 アプリの実行 ファイル Provisioning Profile / entitlements 写真:アフロ
  39. 39. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. iOS アプリを再署名 39 証明書 開発元: Applicat テスト実行: 可 アプリの実行 ファイル Provisioning Profile / entitlements • 再署名には fastlane の sigh を利用 写真:アフロ
  40. 40. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 実行前処理:端末初期化 40 • 初期化ができていないとテスト結果がぶれる • 実機のリセットは難しい • Android • 他アプリの Shared Preference • 他アプリをすべて削除すれば OK • iOS • Key Chain • アプリからしか消せない
  41. 41. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 実行前準備 iOS のテスト前初期化用 アプリを用意 テスト実行前にKey Chain を削除 41
  42. 42. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. リトライ機能 • テスト失敗時、同条件の別端末で再実行 するリトライ機能 • テストが失敗したとき、テストケース自体 の問題でなく環境起因で失敗していること もあるため 42
  43. 43. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. デバイス監視 • 実機との接続が切れることがある • 定期的にコマンドでデバイスの接続を確 認し、接続がなくなった場合アラートを投 げる 43
  44. 44. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 安定して実行されるように 44
  45. 45. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 他にも…
  46. 46. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ライブラリの提供 • 全社で共通に使う処理をライブラリ化 • Yahoo! JAPAN IDのログイン機能 • ネットワーク設定機能 (hosts) 46
  47. 47. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ログイン機能 • ログイン機能はほとんどのアプリで実装 • テストケースにアノテーションをつけるだけでログイ ン状態にできる 47 @YJLogin("Yahoo_Japan_ID") @Test public void ログイン状態でのトップ画面表示を確認() {
  48. 48. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ネットワーク設定機能 • 設定ファイルを置くことで、WebAPIリクエストの宛先 を開発環境のものに変更 • /etc/hosts の書き換えのようなもの • 実機/エミュレーターそれぞれにフォワードプロキ シーを割り当てて実現 48
  49. 49. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. フレームワークの整備 • テストの書き方のサポート • ドキュメントの整備 • PageObject パターンでテストがかけるフレーム ワークの提供 • 適度なタイミングで画面遷移待ち 49
  50. 50. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Appium への貢献 (すこし) 50 マージされました
  51. 51. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. まとめ
  52. 52. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ビルド環境構築が大変 ビルド失敗でテスト失敗に 初期化が大変 毎回同じ環境を作れない 手作業だと忘れる 仕組みをつくるのも大変 並列実行が難しい シミュレーターだけでなく実機 でも毎回同じ環境! まとめ 「アプリE2Eテストの実行環境」の整備は大変 52 ビルド • テスト対象のアプリのビルド 端末準備 • テスト実行端末の起動・初期化 テスト実行 • テストスクリプトを実行 結果保存や 共有 • 結果を保存 • PJ関係者に周知 全社のCIツールでビルドしてテ スト! 気にしないでも並列実行! リトライもしてくれる デフォルトで保存! 通知も設定するだけ 簡単
  53. 53. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 最後に アプリのE2Eテストを実行しやすい環境は整 えられた でも、まだまだこれから、、 ヤフーでは開発環境の整備に興味があるエ ンジニアも募集しています! 53
  54. 54. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. おわり

×