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
50
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
16k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
930
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
260
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
3.2k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.8k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
400
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.8k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.5k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
8
5.9k
Other Decks in Programming
See All in Programming
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
510
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
800
CSC307 Lecture 10
javiergs
PRO
1
660
atmaCup #23でAIコーディングを活用した話
ml_bear
1
150
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
110
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
6
680
CSC307 Lecture 07
javiergs
PRO
1
560
Metaprogramming isn't real, it can't hurt you
okuramasafumi
0
100
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
dchart: charts from deck markup
ajstarks
3
1k
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
My Coaching Mixtape
mlcsv
0
52
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Believing is Seeing
oripsolob
1
59
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Claude Code のすすめ
schroneko
67
210k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
4 Signs Your Business is Dying
shpigford
187
22k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
58
50k
Amusing Abliteration
ianozsvald
0
110
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ίʔυ