Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
STFとAPPIUMを使ってテスト 工数を半分にした話
Search
NAVITIME JAPAN
PRO
March 23, 2017
Programming
0
20
STFとAPPIUMを使ってテスト 工数を半分にした話
Minami Aoyama Night#2で発表した内容となります。
NAVITIME JAPAN
PRO
March 23, 2017
Tweet
Share
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
22
14k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
260
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
88
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
2.3k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.3k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
220
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.2k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.2k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
7
5.2k
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
0
650
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
100
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
RubyLSPのマルチバイト文字対応
notfounds
0
120
初めてDefinitelyTypedにPRを出した話
syumai
0
420
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
Jakarta EE meets AI
ivargrimstad
0
110
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
230
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
120
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Teambox: Starting and Learning
jrom
133
8.8k
For a Future-Friendly Web
brad_frost
175
9.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
The Invisible Side of Design
smashingmag
298
50k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
RailsConf 2023
tenderlove
29
900
Fireside Chat
paigeccino
34
3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
It's Worth the Effort
3n
183
27k
Building Adaptive Systems
keathley
38
2.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Transcript
STFͱAPPIUMΛͬͯςετ Λʹͨ͠
ࣗݾհ ▸ לౡ ▸ 2005 NAVITIME JAPAN ೖࣾ ▸ ۙͷ͓ࣄ
▸ NAVITIMEͷAWSҠߦ ▸ શࣾతͳվળPJ ▸ झຯɿϥϯχϯάɺΰϧϑɺٿ
NAVITIMEαʔϏεͷ͝հ
τϥοΫΧʔφϏ ▸ ຊॳʂτϥοΫ͚ΧʔφϏͷఏڙΛ։࢝
NAVITIMEτϥϕϧ 201610݄ϦϦʔεʂ A
NAVITIMEτϥϕϧ
ANDROID͚ͷUIςετςε τΛࣗಈԽ͓ͨ͠
UIςετࣗಈԽͷഎܠ ▸ ༷ʑͳαʔϏεΛϚϧνσόΠεʹରԠ Android/iOS߹Θͤͯ 46 छྨͷΞϓϦΛӡ༻
UIςετࣗಈԽͷഎܠ ▸ ΞϓϦϦϦʔεͷʹϦάϨογϣϯςετͷίετ͕ൃੜ ϦάϨογϣϯςετΛࣗಈԽ͢ΔࣄͰίετΛݮ
࢝Ίʹݕ౼ͨ͜͠ͱ ଞࣾͷϚωʔδυαʔϏεΛར༻͢Δʁ ▸ AWS Device FarmɺXamarin Test CloudɺGoogle test Lab
Λར༻͢Δʁ ▸ ࣗࣾͰUIςετͷΈΛߏங͢Δʁ
ϚωʔδυαʔϏεൺֱ AWS device farm Xamarin Test Cloud Google Cloud Test
Lab ςετ iOS:192छྨ Android:198छྨ iOS:1245 Android:1272 AsusɺHTCɺLGɺ MotorolaɺSamsungɺ Sonyͷ͕ར༻Մೳ αϙʔτOS iOSɺAndroidɺFire OS iOSɺAndroid Android αϙʔτ͍ͯ͠Δ framework AppiumɺCalabash AppiumɺCalabashɺ Xamarin UI TestɺEspresso instrumentɺ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
̦A୲ऀ͚ ϩʔΧϧڥͷߏਤ APPIUMαʔόʔ RSPEC /dev/bus/usb RUBY ɾVagrant্ͷUbuntuαʔόʔͰՔಇͤͨ͞DockerʹAppiumαʔόʔΛཱͯΔ
VAGRANTΛͬͨཧ༝ ɾDocker for MacɺDocker for WindowsUSB 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ίʔυ