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