Top Banner
2014/10/18 第2回 日本Seleniumユーザーコミュニティ勉強 クックパッドアプリの開発を支援する Appiumの話し
55

20141018 selenium appium_cookpad

May 26, 2015

Download

Software

Kazuaki MATSUO

第2回 日本Seleniumユーザーコミュニティ勉強会の資料です。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 20141018 selenium appium_cookpad

2014/10/18 第2回 日本Seleniumユーザーコミュニティ勉強

クックパッドアプリの開発を支援する Appiumの話し

Page 2: 20141018 selenium appium_cookpad

私• 松尾和昭

• テストエンジニア at Cookpad • Twitter: @Kazu_cocoa !

• 関連 • JaSST’14 Hokkaido

• 『モバイルアプリ開発体制の継続的改善』

Page 3: 20141018 selenium appium_cookpad
Page 4: 20141018 selenium appium_cookpad
Page 5: 20141018 selenium appium_cookpad

Appium

Page 6: 20141018 selenium appium_cookpad

http://www.slideshare.net/hugs/selenium-appium

第1回日本Seleniumユーザーコミュニティ勉強会

Page 7: 20141018 selenium appium_cookpad
Page 8: 20141018 selenium appium_cookpad

Web Page: http://appium.io/

GitHub: https://github.com/appium/appium

Page 9: 20141018 selenium appium_cookpad

参照: http://www.3pillarglobal.com/insights/appium-a-cross-browser-mobile-automation-tool

Page 10: 20141018 selenium appium_cookpad

UIAutomation

uiautomator (API 16 (Android 4.1) or higher)

Page 11: 20141018 selenium appium_cookpad

Philosophy

Page 12: 20141018 selenium appium_cookpad
Page 13: 20141018 selenium appium_cookpad

MVCなどで切り分けて テストしにくい

Page 14: 20141018 selenium appium_cookpad

描画要素をテスト SDK + 専用ビルド

Page 15: 20141018 selenium appium_cookpad

「SDK+専用ビルド」は リリースされない

Page 16: 20141018 selenium appium_cookpad

SDK+専用ビルド +

リリースビルド

Page 17: 20141018 selenium appium_cookpad

リリースビルド + Appium

Page 18: 20141018 selenium appium_cookpad

リリースモジュールを テストする

Page 19: 20141018 selenium appium_cookpad
Page 20: 20141018 selenium appium_cookpad

自分たちの開発環境に、 Appiumを統合する

Page 21: 20141018 selenium appium_cookpad
Page 22: 20141018 selenium appium_cookpad

Ruby + RSpec + Turnip ImageMagick or perceptualdiff

Selenium Grid !

目的に見合ったツール群の組み合わせ

Page 23: 20141018 selenium appium_cookpad

よいとこ !

よくはない

Page 24: 20141018 selenium appium_cookpad

よいとこ• リリースビルドをテスト可能

• 多彩なツールの組み合わせ

• Appiumはあくまでもアプリ操作

• 黒魔術を使わないのでOSの変化に追従しやすそう

Page 25: 20141018 selenium appium_cookpad

よくはない• 実例がない • 実行に時間がかかる • 工夫が必要

• 誰もがAppiumを使える環境の構築が手間 • 社内に広げるきっかけの妨げ

Page 26: 20141018 selenium appium_cookpad

Cookpadにおける活用事例

Page 27: 20141018 selenium appium_cookpad

私の今の立ち位置• テストエンジニア

• Android / iOS アプリ

• 開発行程の改善

• テストに関わる社内への情報伝搬

Page 28: 20141018 selenium appium_cookpad

• ネイティブアプリ

• UIの修正が頻繁

• 修正規模の大小はあるが

• 約2週間毎のAppStoreへのサブミット

• 実装は数人のチーム

iOS クックパッドアプリ

Page 29: 20141018 selenium appium_cookpad

テストレベル

Web API

Page 30: 20141018 selenium appium_cookpad

リリース工程

企画期間 開発期間

検証期間

master branch

release branch

Page 31: 20141018 selenium appium_cookpad

Appiumを使うタイミング

Page 32: 20141018 selenium appium_cookpad

master branch

企画期間 開発期間

検証期間

release branch

Page 33: 20141018 selenium appium_cookpad

主な確認対象

• 画面遷移 • レイアウト崩れ

Page 34: 20141018 selenium appium_cookpad

テストケース数と時間• テストケース数

• 100ケース/1capability • Capability

• 2 ~ 3 種類 • 1種類にかかる時間

• 1時間

今の開発周期ではこの時間で十分なので、これ以上は

頑張っていない

Page 35: 20141018 selenium appium_cookpad

工夫

Page 36: 20141018 selenium appium_cookpad

変化への追従

Page 37: 20141018 selenium appium_cookpad

• 使い始めた当初は、Appium 1.0.0 よりも前

• 修正が入る可能性が大いにある

• 実行シナリオは変更したくない

• テストケースの変更にのみ依存するようにしたい

• 具体的な実装からは切り離したい

Page 38: 20141018 selenium appium_cookpad

責務の分離シナリオ .feature

実装コード *_steps.rb

ラッパー .rb

appium_lib Appium

シナリオ 変更の吸収 Appium

Page 39: 20141018 selenium appium_cookpad

役割シナリオ .feature

実装コード *_steps.rb

ラッパー .rb

appium_lib Appium

シナリオ 変更の吸収 Appium

シナリオの修正にのみ追従したい Appium側の修正を、

シナリオから分離したい

Appium側の 修正に依存

Page 40: 20141018 selenium appium_cookpad

$ rspec

Page 41: 20141018 selenium appium_cookpad

login.featurehs�|�|_<YMcWRdCG=�||Z^bTQS]aRd��||_<YMEOFOeKNQUSd]IcWRdDNAJ?I@N�||||pr|�%&5*$&�|ImiPj>�||||�|�42&1!23"342�|_<YIcWRdDN�||||�|fxL|�&70&$3&%�|?toBOH=N�||||�|[Vb<dZ`\]P|�2$1&&.2)/3�|J=>wpIkN�!||{��||||:|%&5*$&|||:|42&1!23"342||:|||&70&$3&%|||||:|2$1&&.2)/3|:�||||:|�*0)/.&�|:|�X[]�|||||:|�gqDNun�|:|�$"0341&�|:�||||:|�*0)/.&�|:|�vz�|||||||:|�gqDNun�|:|�$"0341&��|:�||||:|�*0)/.&�|:|�yz�|||||||:|�gqDNun�|:|�$"0341&��|:�

Page 42: 20141018 selenium appium_cookpad

login_steps.rb-/%4,&|�"2&�3&02�||23&0|�lM|�"$$/4.3|J|�0"22|IcWRdDN�|%/|:"$$/4.3�|0"22:�||||&,&-&.32|�|3&73'*&,%2�||||&,&-&.32� �2&.%!+&82|"$$/4.3�||||&,&-&.32� �2&.%!+&82|0"22�||||#433/.��cWRd���$,*$+�||&.%�!||23&0|�lM|�42&1|_<YIcWRdDN�|%/|:42&1:�||||*'|42&1|��|�vz��||||||"$$/4.3|�|����!����!������||||||0"22|�|����!����!�����||||&,2*'|42&1|��|�yz��||||||"$$/4.3|�|����!��!������||||||0"22|�|����!��!�����||||&,2&�||||||"$$/4.3|�|���||||||0"22|�|���||||&.%�||||2&.%|�lM|�"$$/4.3|J|�0"22|IcWRdDN��|"$$/4.3�|0"22�||&.%�!||23&0|�[Vb<dZ`\]P|�'*,&."-&|J=>wpIkN�|%/|:'*,&."-&:�||||2"5&!2$1&&.!6*3)!!"2�'*,&."-&��||&.%�!||23&0|�fxL|�."-&|?toBOH=N�|%/|:."-&:�||||2,&&0|�||||&70&$3�|6"*3|9|'*.%!&,&-&.3�"$$&22*#*,*38!*%�|."-&�|;�%*20,"8&%�|��3/|#&|314&�||&.%�&.%

Page 43: 20141018 selenium appium_cookpad

薄いラッパー層-/%4,&|�00*4-�&2341&�||�|'*.%|&,&-&.3|6*3)|"$$&22*#*,*38!*%|231"3&(8�||%&'|3"0!."-&�&,&-&.3!."-&��||||2,&&0|� �||||'*.%!&,&-&.3�"$$&22*#*,*38!*%�|&,&-&.3!."-&��$,*$+�||&.%�!||�|'*.%|&,&-&.3|6*3)|70"3)|231"3&(8�||%&'|3"0!70"3)�&,&-&.3!70"3)��||||2,&&0|� �||||'*.%!&,&-&.3�70"3)�|&,&-&.3!70"3)��$,*$+�||&.%�!||%&'|3"0!3&73�3&73!."-&��||||2,&&0|� �||||3&73�3&73!."-&��$,*$+�||&.%�&.%

Page 44: 20141018 selenium appium_cookpad

Rubyコード

JavaScript

Page 45: 20141018 selenium appium_cookpad

どんなテストをAppiumに 任せるか

Page 46: 20141018 selenium appium_cookpad

機械が実行可能なタスクは 機械に任せる

Page 47: 20141018 selenium appium_cookpad

人が忘れがちなシナリオは 機械に任せる

Page 48: 20141018 selenium appium_cookpad

シナリオの統合/作り替え

Page 49: 20141018 selenium appium_cookpad

• アカウントの状態に依存しない処理はアカウントの各状態ではシナリオを用意しない

• 複数の操作を1つのシナリオで内包できる場合、内包させ、テストケースを削減

• 他の手段(UIから確認しなくても良い方法に対応したなど)が見つかったシナリオは削除、もしくは操作を限定

Page 50: 20141018 selenium appium_cookpad

機械が実施していない領域を 探索的にテスト

Page 51: 20141018 selenium appium_cookpad

• 機能 • 状態が関係するような複雑性を増した手順

• 非機能 • ユーザビリティ • ISO 2941 • Context of use

など

Page 52: 20141018 selenium appium_cookpad

これまでの成果• 検証期間中のタスク内容の変化

• 致命的な不具合の検出(落ちバグ系)

• Crashlytics/お問い合わせによるクラッシュ系不具合、不具合報告が減少

Page 53: 20141018 selenium appium_cookpad

これからの課題• Appiumを使っているところ • iOS8対応 • Androidのシナリオ充実 • 社内への他アプリへの展開

• モバイルアプリの評価自体 • 評価体制のスケール

Page 54: 20141018 selenium appium_cookpad

まとめ• Appium

• Android / iOS (FireFox)

• ツールの組み合わせ

• よいとこ / よくないとこ

• Cookpadでの活用事例

Page 55: 20141018 selenium appium_cookpad

Questions ?