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