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