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

253 Views

April 20, 17

スライド概要

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

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

快適・簡単・安心な アプリ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.

自己紹介 西島 寛 • • • 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 .

3.

取り上げる話題 • アプリ E2E テスト実行環境の話 3 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

4.

取り上げない話題 • E2E テストの作り方については触れません! 4 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

5.

アジェンダ • • • • • • • 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 .

6.

ヤフーのアプリ開発 について 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

7.

ヤフー・ジャパンのアプリ 提供アプリ数 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 .

8.

ヤフー・ジャパンのアプリ 累計ダウンロード数 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 .

9.

開発体制 開発・運営のメンバーは2000名以上 サービスごとにチームが分離 開発フロー・テストなど多くが権限移譲 9 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

10.

アプリの開発・テスト環境 開発 Gitに コミット Co p yrig ht © 2 0 1 7 CI上で単体 テスト &ビルド 社内アプリ 配布サイト にデプロイ Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . ダウンロード して手動テ スト

11.

アプリ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

12.

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 . ダウンロード して手動テ スト

13.

開発の背景 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

14.

サービス開発の声 以前からサービスによってはアプリ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 .

15.

課題 「アプリE2Eテストの実行環境」の整備は大変 • テスト対象のアプリのビルド ビルド環境構築が大変 ビルド失敗でテスト失敗に • テスト実行端末の起動・初期化 初期化が大変 毎回同じ環境を作れない • テストスクリプトを実行 並列実行が難しい • 結果を保存 • PJ関係者に周知 手作業だと忘れる 仕組みをつくるのも大変 ビルド 端末準備 テスト実行 結果保存や 共有 15 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

16.

気づき • アプリのE2Eテストの実行環境整備は サービスの開発と両立しない • 実行環境は全社共通で整備したほうがよ い 16 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

17.

開発の方針 • ヤフーの規模で快適に使える • 簡単にCIツールと連携できる • 安心してテスト実行ができる 17 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

18.

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 .

19.

自社開発すると 決めるまで 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

20.

クラウドサービスの利用検討 • 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 .

21.

クラウドサービスの利用検討 メリット デメリット 結果が安定 リリース前のアプリの外部公 開になる スケールする 自社開発することに 社内ネットワーク上の開発用 APIを使ったテストができない 導入までのスピード 21 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

22.

フレームワークの選定 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 .

23.

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

24.

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 .

25.

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 .

26.

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

27.

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

28.

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

29.

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

30.

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 .

31.

開発したテスト実行環境 テスト実行キュー クラスタ Appium / テスト実行 ワーカー 31 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

32.

テスト実行キュー • テスト実行を 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 .

33.

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

整備した環境 • • • • • 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 .

35.

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

36.

安定したテスト実行のた めの工夫 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

37.

ビルド • 社内標準の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 .

38.

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 .

39.

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 .

40.

実行前処理:端末初期化 • 初期化ができていないとテスト結果がぶれる • 実機のリセットは難しい • 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 .

41.

実行前準備 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.

リトライ機能 • テスト失敗時、同条件の別端末で再実行 するリトライ機能 • テストが失敗したとき、テストケース自体 の問題でなく環境起因で失敗していること もあるため 42 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

43.

デバイス監視 • 実機との接続が切れることがある • 定期的にコマンドでデバイスの接続を確 認し、接続がなくなった場合アラートを投 げる 43 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

44.

安定して実行されるように 44 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

45.

他にも… 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

46.

ライブラリの提供 • 全社で共通に使う処理をライブラリ化 • 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 .

47.

ログイン機能 • ログイン機能はほとんどのアプリで実装 • テストケースにアノテーションをつけるだけでログイ ン状態にできる @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 .

48.

ネットワーク設定機能 • 設定ファイルを置くことで、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 .

49.

フレームワークの整備 • テストの書き方のサポート • ドキュメントの整備 • PageObject パターンでテストがかけるフレーム ワークの提供 • 適度なタイミングで画面遷移待ち 49 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

50.

Appium への貢献 (すこし) マージされました 50 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

51.

まとめ 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

52.

まとめ 簡単 「アプリ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 .

53.

最後に アプリのE2Eテストを実行しやすい環境は整 えられた でも、まだまだこれから、、 ヤフーでは開発環境の整備に興味があるエ ンジニアも募集しています! 53 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

54.

おわり 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