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.

STFとAPPIUMを使ってテスト 工数を半分にした話

929 views

Published on

Minami Aoyama Night#2で発表した内容となります。

Published in: Technology
  • Be the first to comment

STFとAPPIUMを使ってテスト 工数を半分にした話

  1. 1. STFとAPPIUMを使ってテ スト⼯数を半分にした話
  2. 2. ⾃⼰紹介 ▸ 萱島 ▸ 2005年 NAVITIME JAPAN ⼊社 ▸ 直近のお仕事 ▸ 乗換NAVITIMEのAWS移⾏ ▸ 全社的な改善PJ ▸ 趣味:ランニング、ゴルフ、野球
  3. 3. NAVITIMEサービスのご紹介
  4. 4. トラックカーナビ ▸ ⽇本初!トラック向けカーナビの提供を開始
  5. 5. NAVITIMEトラベル 2016年10月リリース! A
  6. 6. NAVITIMEトラベル
  7. 7. ANDROID向けのUIテスト テストを⾃動化したお話
  8. 8. UIテスト⾃動化の背景 ▸ 様々なサービスをマルチデバイスに対応 Android/iOS合わせて 約 46 種類のアプリを運⽤
  9. 9. UIテスト⾃動化の背景 ▸ アプリリリースの度にリグレッションテストのコストが発⽣ リグレッションテストを⾃動化する事でコストを削減
  10. 10. 始めに検討したこと 他社のマネージドサービスを利⽤する? ▸ AWS Device Farm、Xamarin Test Cloud、Google test Labを利⽤する? ▸ ⾃社でUIテストの仕組みを構築する?
  11. 11. マネージドサービス⽐較 AWS device farm Xamarin Test Cloud Google Cloud Test Lab テスト端末 iOS:192種類 Android:198種類 iOS:約1245端末 Android:1272端末 Asus、HTC、LG、 Motorola、Samsung、 Sonyの端末が利⽤可能 サポートOS iOS、Android、 Fire OS iOS、Android Android サポートしている framework Appium、Calabash Appium、Calabash、 Xamarin UI Test、Espresso instrument、Roboテスト
  12. 12. 所感 ▸ 国内端末が少ない ▸ テスト実⾏時間が⻑い(AWS Device Farm) ▸ UIテストの実⾏が難しかった(Xamarin Test Cloud)
  13. 13. 結果的に ⾃社でUIテストの仕組みを構築 ▸ 社内にある余剰端末を利⽤ ▸ ⾃前で⽤意するので低コスト と を組み合わせたシステムを構築
  14. 14. APPIUMとは? ▸ スマホアプリ向けのテストフレームワーク ▸ iOS/Android両⽅に対応 ▸ 各OSのテストツールをラップするAPIサーバー。Appiumが ⽤意するAPIを介してシュミレータ/実機に対してテストが 実⾏される。
  15. 15. APPIUMとは? APPIUM クライアント ライブラリ テストコード Mobile JSON Wire Protocol でAppiumAPIを実⾏ UiAutomatorのリモートデバック 機能を使ってUIテストを実⾏
  16. 16. STFとは? ▸ サイバーエージェント社が開発したツール ▸ ブラウザからAndroidの実機に対して操作/検証することが できる。 ▸ 画⾯キャプチャ、端末のリソース状況、ログ情報参照もブ ラウザから可能 ▸ 端末の貸し借りが楽。紛失リスクも減る。
  17. 17. システム構成 テスト実⾏ サーバー RSPEC STFサーバー RUBY ・testコードはrubyで実装 STFの remoteConnect APIを介して 取得したエンドポイントに対して adb connectで接続 ②adb connect ①remoteConnectAPI  ③Test実⾏
  18. 18. 困った事 ▸ ⽇本語⼊⼒⽅法が分からない ▸ WebView画⾯の要素取得に失敗する ▸ Appium実⾏環境構築にハマる
  19. 19. ⽇本語⼊⼒⽅法が分からない ▸ キーボード⼊⼒する際、前回利⽤していたIMEがデフォルト で設定される。
  20. 20. ⽇本語⼊⼒⽅法が分からない 対策 ▸ テスト実⾏する前にGoogle⽇本語⼊⼒をデフォルトIMEに 設定することで対応
  21. 21. WEBVIEW画⾯の要素取得に失敗する ▸ WebView画⾯の要素取得に失敗する。 Webviewの要素を操作する為の、Context切替え処理にてエラー
  22. 22. WEBVIEW画⾯の要素取得に失敗する 対策 ▸ テスト対象端末内にインストールされている「Androidシス テムのWebView」のバージョンを最新にする。 ▸ Appiumサーバーにインストールしたchromedriverのバー ジョンを最新にする。 ▸ setWebContentsDebuggingEnabledにtrueを設定する。
  23. 23. APPIUM実⾏環境構築にハマる ▸ Appium実⾏環境構築〜sampleテストコード実⾏までに少 し時間がかかった。 QA担当が簡単に環境構築できるような仕組みを作りたい
  24. 24. APPIUM実⾏環境構築にハマる 対策 ▸ Appium実⾏環境をDocker化しました。 ▸ 参考:vbanthia/appium-docker-demo
  25. 25. QA担当者向け ローカル環境の構成図 APPIUMサーバー RSPEC /dev/bus/usb RUBY ・Vagrant上のUbuntuサーバーで稼働させたDocker内にAppiumサーバーを⽴てる
  26. 26. VAGRANTを使った理由 ・Docker for Mac、Docker for WindowsはUSB Filterに対応していなかった。 (コンテナ内からUSBデバイスを認識できない) Docker toolbox Docker for mac、Docker for windows
  27. 27. テスト結果画⾯ ▸ 前回のテスト結果との差分を表⽰
  28. 28. DEMO
  29. 29. リグレッションテスト ⾃動化による成果
  30. 30. 成果 ▸ ⼿動で実施していたリグレッションテスト(回帰テスト)の20% を⾃動化できた。 ▸ 副次的な効果として、テスト項⽬の⾒直し(テスト項⽬の最適化)を ⾏った事により、リグレッションテストの⼯数が半分になりまし た。 ▸ 意図しないデグレを発⾒できる。 ▸ 障害検知を早める。 ▸ 例:会員登録/解除フロー、アプリ初期処理
  31. 31. 運⽤後に⾒えてきた課題
  32. 32. 課題 ▸ テストコード作成にある程度プログラムスキルが必要 ▸ ⼈によってはマスターするまで時間がかかる ▸ QA担当者だけで運⽤を回すのは難しい。エンジニアのサ ポートは必須 ▸ Androidアプリ→Chromeブラウザ、Androidアプリ→他の Androidアプリといったアプリケーション連携部分のテスト はAppiumではできない。
  33. 33. 理想的なUIテストの運⽤⽅法 ▸ 全ての操作を⾃動化しようとしない。 ▸ 「変わってはいけない」画⾯/処理に対してテストすると効率的 ▸ ⼩さな単位でテストする。 ▸ 外部的な要件に依存する機能の⾃動化は優先度を下げる。 ▸ NAVIIMEでの例:運⾏情報機能、渋滞情報機能 ▸ 常にテストが成功するような環境を維持する。 ▸ 検証環境のWEBサーバーが不安定
  34. 34. 参考リンク ▸ openstf/stf ▸ vbanthia/appium-docker-demo ▸ stf-appium-example ▸ STFに接続された端末にappium経由でテスト実⾏する sampleコード

×