20141018 selenium appium_cookpad
-
Upload
kazuaki-matsuo -
Category
Software
-
view
6.836 -
download
3
description
Transcript of 20141018 selenium appium_cookpad
2014/10/18 第2回 日本Seleniumユーザーコミュニティ勉強
クックパッドアプリの開発を支援する Appiumの話し
私• 松尾和昭
• テストエンジニア at Cookpad • Twitter: @Kazu_cocoa !
• 関連 • JaSST’14 Hokkaido
• 『モバイルアプリ開発体制の継続的改善』
Appium
http://www.slideshare.net/hugs/selenium-appium
第1回日本Seleniumユーザーコミュニティ勉強会
Web Page: http://appium.io/
GitHub: https://github.com/appium/appium
参照: http://www.3pillarglobal.com/insights/appium-a-cross-browser-mobile-automation-tool
UIAutomation
uiautomator (API 16 (Android 4.1) or higher)
Philosophy
MVCなどで切り分けて テストしにくい
描画要素をテスト SDK + 専用ビルド
「SDK+専用ビルド」は リリースされない
SDK+専用ビルド +
リリースビルド
リリースビルド + Appium
リリースモジュールを テストする
自分たちの開発環境に、 Appiumを統合する
Ruby + RSpec + Turnip ImageMagick or perceptualdiff
Selenium Grid !
目的に見合ったツール群の組み合わせ
よいとこ !
よくはない
よいとこ• リリースビルドをテスト可能
• 多彩なツールの組み合わせ
• Appiumはあくまでもアプリ操作
• 黒魔術を使わないのでOSの変化に追従しやすそう
よくはない• 実例がない • 実行に時間がかかる • 工夫が必要
• 誰もがAppiumを使える環境の構築が手間 • 社内に広げるきっかけの妨げ
Cookpadにおける活用事例
私の今の立ち位置• テストエンジニア
• Android / iOS アプリ
• 開発行程の改善
• テストに関わる社内への情報伝搬
• ネイティブアプリ
• UIの修正が頻繁
• 修正規模の大小はあるが
• 約2週間毎のAppStoreへのサブミット
• 実装は数人のチーム
iOS クックパッドアプリ
テストレベル
Web API
リリース工程
企画期間 開発期間
検証期間
master branch
release branch
Appiumを使うタイミング
master branch
企画期間 開発期間
検証期間
release branch
主な確認対象
• 画面遷移 • レイアウト崩れ
テストケース数と時間• テストケース数
• 100ケース/1capability • Capability
• 2 ~ 3 種類 • 1種類にかかる時間
• 1時間
今の開発周期ではこの時間で十分なので、これ以上は
頑張っていない
工夫
変化への追従
• 使い始めた当初は、Appium 1.0.0 よりも前
• 修正が入る可能性が大いにある
• 実行シナリオは変更したくない
• テストケースの変更にのみ依存するようにしたい
• 具体的な実装からは切り離したい
責務の分離シナリオ .feature
実装コード *_steps.rb
ラッパー .rb
appium_lib Appium
シナリオ 変更の吸収 Appium
役割シナリオ .feature
実装コード *_steps.rb
ラッパー .rb
appium_lib Appium
シナリオ 変更の吸収 Appium
シナリオの修正にのみ追従したい Appium側の修正を、
シナリオから分離したい
Appium側の 修正に依存
$ rspec
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&��|:�
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&�||&.%�&.%
薄いラッパー層-/%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!."-&��$,*$+�||&.%�&.%
Rubyコード
JavaScript
どんなテストをAppiumに 任せるか
機械が実行可能なタスクは 機械に任せる
人が忘れがちなシナリオは 機械に任せる
シナリオの統合/作り替え
• アカウントの状態に依存しない処理はアカウントの各状態ではシナリオを用意しない
• 複数の操作を1つのシナリオで内包できる場合、内包させ、テストケースを削減
• 他の手段(UIから確認しなくても良い方法に対応したなど)が見つかったシナリオは削除、もしくは操作を限定
機械が実施していない領域を 探索的にテスト
• 機能 • 状態が関係するような複雑性を増した手順
• 非機能 • ユーザビリティ • ISO 2941 • Context of use
など
これまでの成果• 検証期間中のタスク内容の変化
• 致命的な不具合の検出(落ちバグ系)
• Crashlytics/お問い合わせによるクラッシュ系不具合、不具合報告が減少
これからの課題• Appiumを使っているところ • iOS8対応 • Androidのシナリオ充実 • 社内への他アプリへの展開
• モバイルアプリの評価自体 • 評価体制のスケール
まとめ• Appium
• Android / iOS (FireFox)
• ツールの組み合わせ
• よいとこ / よくないとこ
• Cookpadでの活用事例
Questions ?