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

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

Embed Size (px)

Citation preview

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

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

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

⾃⼰紹介

▸ 萱島

▸ 2005年 NAVITIME JAPAN ⼊社

▸ 直近のお仕事

▸ 乗換NAVITIMEのAWS移⾏

▸ 全社的な改善PJ

▸ 趣味:ランニング、ゴルフ、野球

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

NAVITIMEサービスのご紹介

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

トラックカーナビ

▸ ⽇本初!トラック向けカーナビの提供を開始

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

NAVITIMEトラベル

2016年10月リリース!

A

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

NAVITIMEトラベル

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

ANDROID向けのUIテストテストを⾃動化したお話

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

UIテスト⾃動化の背景

▸ 様々なサービスをマルチデバイスに対応

Android/iOS合わせて 約 46 種類のアプリを運⽤

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

UIテスト⾃動化の背景

▸ アプリリリースの度にリグレッションテストのコストが発⽣

リグレッションテストを⾃動化する事でコストを削減

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

始めに検討したこと

他社のマネージドサービスを利⽤する?

▸ AWS Device Farm、Xamarin Test Cloud、Google test Labを利⽤する?

▸ ⾃社でUIテストの仕組みを構築する?

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

マネージドサービス⽐較

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を使ってテスト 工数を半分にした話

所感

▸ 国内端末が少ない

▸ テスト実⾏時間が⻑い(AWS Device Farm)

▸ UIテストの実⾏が難しかった(Xamarin Test Cloud)

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

結果的に

⾃社でUIテストの仕組みを構築

▸ 社内にある余剰端末を利⽤

▸ ⾃前で⽤意するので低コスト

と を組み合わせたシステムを構築

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

APPIUMとは?

▸ スマホアプリ向けのテストフレームワーク

▸ iOS/Android両⽅に対応

▸ 各OSのテストツールをラップするAPIサーバー。Appiumが⽤意するAPIを介してシュミレータ/実機に対してテストが実⾏される。

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

APPIUMとは?

APPIUM クライアント ライブラリ

テストコード

Mobile JSON Wire ProtocolでAppiumAPIを実⾏

UiAutomatorのリモートデバック 機能を使ってUIテストを実⾏

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

STFとは?

▸ サイバーエージェント社が開発したツール

▸ ブラウザからAndroidの実機に対して操作/検証することができる。

▸ 画⾯キャプチャ、端末のリソース状況、ログ情報参照もブラウザから可能

▸ 端末の貸し借りが楽。紛失リスクも減る。

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

システム構成

テスト実⾏ サーバー

RSPEC

STFサーバー

RUBY

・testコードはrubyで実装

STFの remoteConnect APIを介して 取得したエンドポイントに対して adb connectで接続

②adb connect

①remoteConnectAPI

 ③Test実⾏

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

困った事

▸ ⽇本語⼊⼒⽅法が分からない

▸ WebView画⾯の要素取得に失敗する

▸ Appium実⾏環境構築にハマる

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

⽇本語⼊⼒⽅法が分からない

▸ キーボード⼊⼒する際、前回利⽤していたIMEがデフォルトで設定される。

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

⽇本語⼊⼒⽅法が分からない

対策

▸ テスト実⾏する前にGoogle⽇本語⼊⼒をデフォルトIMEに設定することで対応

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

WEBVIEW画⾯の要素取得に失敗する

▸ WebView画⾯の要素取得に失敗する。

Webviewの要素を操作する為の、Context切替え処理にてエラー

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

WEBVIEW画⾯の要素取得に失敗する

対策

▸ テスト対象端末内にインストールされている「AndroidシステムのWebView」のバージョンを最新にする。

▸ Appiumサーバーにインストールしたchromedriverのバージョンを最新にする。

▸ setWebContentsDebuggingEnabledにtrueを設定する。

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

APPIUM実⾏環境構築にハマる

▸ Appium実⾏環境構築〜sampleテストコード実⾏までに少し時間がかかった。

QA担当が簡単に環境構築できるような仕組みを作りたい

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

APPIUM実⾏環境構築にハマる

対策

▸ Appium実⾏環境をDocker化しました。

▸ 参考:vbanthia/appium-docker-demo

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

QA担当者向け ローカル環境の構成図

APPIUMサーバーRSPEC

/dev/bus/usb

RUBY

・Vagrant上のUbuntuサーバーで稼働させたDocker内にAppiumサーバーを⽴てる

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

VAGRANTを使った理由

・Docker for Mac、Docker for WindowsはUSB Filterに対応していなかった。 (コンテナ内からUSBデバイスを認識できない)

Docker toolbox

Docker for mac、Docker for windows

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

テスト結果画⾯

▸ 前回のテスト結果との差分を表⽰

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

DEMO

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

リグレッションテスト ⾃動化による成果

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

成果

▸ ⼿動で実施していたリグレッションテスト(回帰テスト)の20%を⾃動化できた。

▸ 副次的な効果として、テスト項⽬の⾒直し(テスト項⽬の最適化)を⾏った事により、リグレッションテストの⼯数が半分になりました。

▸ 意図しないデグレを発⾒できる。

▸ 障害検知を早める。

▸ 例:会員登録/解除フロー、アプリ初期処理

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

運⽤後に⾒えてきた課題

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

課題

▸ テストコード作成にある程度プログラムスキルが必要

▸ ⼈によってはマスターするまで時間がかかる

▸ QA担当者だけで運⽤を回すのは難しい。エンジニアのサポートは必須

▸ Androidアプリ→Chromeブラウザ、Androidアプリ→他のAndroidアプリといったアプリケーション連携部分のテストはAppiumではできない。

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

理想的なUIテストの運⽤⽅法

▸ 全ての操作を⾃動化しようとしない。

▸ 「変わってはいけない」画⾯/処理に対してテストすると効率的

▸ ⼩さな単位でテストする。

▸ 外部的な要件に依存する機能の⾃動化は優先度を下げる。

▸ NAVIIMEでの例:運⾏情報機能、渋滞情報機能

▸ 常にテストが成功するような環境を維持する。

▸ 検証環境のWEBサーバーが不安定

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

参考リンク

▸ openstf/stf

▸ vbanthia/appium-docker-demo

▸ stf-appium-example

▸ STFに接続された端末にappium経由でテスト実⾏するsampleコード