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
46
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
23
15k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
710
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
240
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
3k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.6k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
360
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.6k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.3k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
7
5.6k
Other Decks in Programming
See All in Programming
rage against annotate_predecessor
junk0612
0
160
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
200
AI時代のUIはどこへ行く?
yusukebe
17
8.7k
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.7k
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.4k
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
22
11k
Improving my own Ruby thereafter
sisshiki1969
1
160
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
120
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.3k
複雑なドメインに挑む.pdf
yukisakai1225
5
1.1k
Navigating Dependency Injection with Metro
zacsweers
3
230
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
Featured
See All Featured
Navigating Team Friction
lara
189
15k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Unsuck your backbone
ammeep
671
58k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
111
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Agile that works and the tools we love
rasmusluckow
330
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
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ίʔυ