Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ΈΜͳ͓͏ʂ AWS Device Farm 20172݄23 ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 1
Slide 2
Slide 2 text
ࣗݾհ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 2
Slide 3
Slide 3 text
ࠤ౻߶࢜(@hatakenokakashi) SIاۀͷอकӡ༻͔ΒɺελʔτΞοϓͷCTOΛܦͯɺ MAMORIOגࣜձࣾʹ2݄͔ΒiOSΤϯδχΞΛ͍ͯ͠·͢ɻ RailsͱJavaScript(ES6)ͱGolangͱ༑ୡʹͳΔͷ͕ࠓͷඪɻ ίʔώʔͱϛϯτςΟ͕͖ɻ ϒϩάɿhttp://blog.personal-factory.com/ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 3
Slide 4
Slide 4 text
ςετͭΒ͍ͬ͢ΑͶ! ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 4
Slide 5
Slide 5 text
։ൃͲΜͲΜਐΉ ͦͷͨͼʹશΛςετ͠ͳ͖Ό͍ ͚ͳ͍ɻ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 5
Slide 6
Slide 6 text
ͦ͜ʹཱ͔ͪΔ • ༻ҙ͕େม • ૿େ͢Δςετ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 6
Slide 7
Slide 7 text
Ͳ͏͠Α͏(´ɾТɾʆ) ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 7
Slide 8
Slide 8 text
ͦ͜ͰԞ͞Μʂ Device Farmͷग़൪Ͱ͢ʂ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 8
Slide 9
Slide 9 text
Device FarmͬͯԿʁ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 9
Slide 10
Slide 10 text
Device Farm • AWSͷεϚϑΥ&WebΞϓϦ͚ςετࣗಈԽαʔϏε • iOSɺAndroid֤֤OSόʔδϣϯΛऔΓἧ͑Δ • ࠷ॳͷ߹ܭ250·Ͱແྉɻޙ0.17 USD/ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 10
Slide 11
Slide 11 text
๛ͳछྨ&OSόʔδϣϯ • iPhone4s-iPhone7PlusͷiOS7.1͔ΒiOS10·Ͱ • iPad2/iPad miniୈҰੈ/iPad Pro • Android΄΅ओཁͳΛͦΖ͍͑ͯΔʢͨͩ͠άϩʔόϧ൛) • AndroidຊΩϟϦΞ͕ΧελϚΠζ͍ͯ͠ΔͷͰ ҙʂ https://aws.amazon.com/jp/device-farm/device-list/ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 11
Slide 12
Slide 12 text
ͲΜͳςετ͕Ͱ͖Δ͔ʁ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 12
Slide 13
Slide 13 text
Fuzz • DeviceFarmʹ༧Ί༻ҙ͞Ε͍ͯΔϑϨʔϜϫʔΫ • σλϥϝʹUIΞΫγϣϯΛ࣮ߦ͢Δɻ • ϞϯΩʔςετͱͯ͠ΞϓϦ͕མͪͳ͍͔Ͳ͏͔νΣοΫͰ ͖Δɻ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 13
Slide 14
Slide 14 text
Appium • Java JUnitɺJava TestNGɺPython • iOS/AndroidʹରԠ͢ΔςετϑϨʔϜϫʔΫɻ • Appiumࣗମ༷ʑͳݴޠͰಈ͚͘ͲDeviceFarmͰରԠ͠ ͍ͯΔͷJavaͱPythonͷΈɻ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 14
Slide 15
Slide 15 text
Calabash • Xamarin͕ࣾϝϯςϯφεΛ͍ͯ͠ΔΦʔϓϯιʔεςετϑ ϨʔϜϫʔΫ • iOS/AndroidʹରԠ • RubyͰಈ͘ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 15
Slide 16
Slide 16 text
UI Automation(Xcode7·Ͱ) • Xcodeʹ͍ͭͯ͘ΔInstrumentsʹଐ͢ΔςετϑϨʔϜϫ ʔΫ • iOSʹରԠ • JavaScriptͰiOSΞϓϦͷUIΛૢ࡞Ͱ͖Δɻ • Xcode8͔ΒInstruments͔Βআ͞Ε༻Ͱ͖ͳ͍ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 16
Slide 17
Slide 17 text
XCTest (XCUI ͓Αͼ KIF ΛؚΉ) • Xcodeʹଐ͢ΔiOSΞϓϦͷςετϑϨʔϜϫʔΫ • Ϣχοτςετ͕XCTest • UIςετΛ͢ΔʹXCUI ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 17
Slide 18
Slide 18 text
AndroidͷςετϑϨʔϜϫʔΫ • Instrumentation • UI Automator • JUnit • Espresso • Robotium ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 18
Slide 19
Slide 19 text
ࢼͯ͠ΈΔ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 19
Slide 20
Slide 20 text
XCUIͰͬͯΈΔ 1. ΞϓϦΛϏϧυ͢Δ 2. XCUIΛϏϧυ͢Δ 3. Payload.ipaϑΝΠϧΛͭ͘Δ 4. Device FarmʹΞϓϦͱςετΛొ࣮͠ߦ 5. ςετ݁ՌΛΈΔ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 20
Slide 21
Slide 21 text
ΞϓϦΛϏϧυ͢Δ XcodeͷProduct -> ArchiveͰΞʔΧΠ ϒ OrganaizerϖʔδͰExport ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 21
Slide 22
Slide 22 text
Save for Development DeploymentΛ બ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 22
Slide 23
Slide 23 text
Device SupportΛExport one app for all compatible devicesʹબ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 23
Slide 24
Slide 24 text
XCUIͰςετίʔυΛॻ͘ import XCTest class MAMORIOUITests: XCTestCase { override func setUp() { super.setUp() continueAfterFailure = false XCUIApplication().launch() } func test1Tutorial() {} } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 24
Slide 25
Slide 25 text
XCUIΛϏϧυ͢Δ Product > Build For > Testing ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 25
Slide 26
Slide 26 text
[UITestName]-Runner.appΛऔಘ ϏϧυύεΛݟΔ /Users//Library/ Developer/Xcode/DerivedData/ -xxxxxxxxxxxxxxxxx/ Build/Products/Debug-iphoneos/ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 26
Slide 27
Slide 27 text
ιʔεҰཡͷ Products >ɹ[APPNAME].app ΛӈΫϦοΫͰFinderΛ։͍ͯྑ͍ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 27
Slide 28
Slide 28 text
Payload.ipaϑΝΠϧΛͭ͘Δ 1. PayloadσΟϨΫτϦΛ࡞Γ[UITestName]-Runner.appΛೖΕ Δɻ 2. ͦͷޙʹzipͰPayloadσΟϨΫτϦΛѹॖ͢Δɻ 3. Payload.zipΛPayload.ipaʹϦωʔϜ͢Δɻ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 28
Slide 29
Slide 29 text
mkdir Payload mv [UITestName]-Runner.app Payload zip Payload.zip Payload mv Payload.zip Payload.ipa ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 29
Slide 30
Slide 30 text
Device FarmʹΞϓϦͱςε τΛొ࣮͠ߦ Create a new project ΛΫϦοΫ Create a new run ΛΫϦοΫ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 30
Slide 31
Slide 31 text
ΞϓϦͷipaϑΝΠϧ ΛΞοϓϩʔυ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 31
Slide 32
Slide 32 text
XCTest UIΛબΜͰ Payload.ipaΛΞοϓ ϩʔυ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 32
Slide 33
Slide 33 text
DeviceΛબͼ·͢ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 33
Slide 34
Slide 34 text
DeviceͷৄࡉΛ͠·͢ ϩέʔγϣϯΛJapanʹ͢Ε͍͍ͱࢥ ͏ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 34
Slide 35
Slide 35 text
DeviceͷλΠϜΞ τઃఆΛ͢Δ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 35
Slide 36
Slide 36 text
ςετ݁ՌΛΈΔ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 36
Slide 37
Slide 37 text
DEMO DeviceFarmͷίϯιʔϧ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 37
Slide 38
Slide 38 text
XCUIͷઆ໌ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 38
Slide 39
Slide 39 text
XCUIͷઆ໌ • XCUIApplicationͰΞϓϦऔಘͯ͠ • XCUIElementQueryͰUI෦Λݕࡧ ͯ͠ • XCUIElementͰλοϓͳͲUIૢ࡞Λ ͢Δ let app = XCUIApplication() app.buttons["startButton"].tap() ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 39
Slide 40
Slide 40 text
XCUIElementQueryͰݕࡧ Ͱ͖ΔΑ͏ʹ accessibilityIdentifierΛઃఆ͠·͠ΐ ͏ɻ Storyboard͜Ε ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 40
Slide 41
Slide 41 text
ίʔυͪ͜Β let title : UILabel = UILabel.init(frame:CGRect(x:0 ,y:0, width:100, height:90)) title.isAccessibilityElement = true title.accessibilityIdentifier = "logoutLabel" ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 41
Slide 42
Slide 42 text
XCUIͰTips 1. γεςϜΞϥʔτͷλοϓํ๏(ϓογϡ௨ڐՄɺϩέʔγ ϣϯڐՄ) 2. webαΠτͷදࣔ(openͰ։͘ͱΕͳ͍ɻwebViewͰදࣔ ͠Α͏) 3. XCUIͷςετ࣮ߦॱ(ϝιου໊ͷιʔτ) 4. Device Farmͷ࣮ߦॱ(ϝιου࣮ͷԼ͔Β࣮ߦ͞ΕΔ) ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 42
Slide 43
Slide 43 text
γεςϜΞϥʔτͷλοϓํ ๏(ϓογϡ௨ڐՄɺϩέʔ γϣϯڐՄ) ͜ΕͩΊ let app = XCUIApplication() let notifiAlert = app.alerts["“MAMORIO”௨Λૹ৴͠·͢ɻΑΖ͍͠Ͱ͔͢?"] let comfirmButton = notifiAlert.buttons["ڐՄ"] if comfirmButton.exists { comfirmButton.tap() } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 43
Slide 44
Slide 44 text
addUIInterruptionMonitor ϝιουΛ࣮ߦ͢Δඞཁ͕͋Δ //͜Ε͕ඞཁ addUIInterruptionMonitor(withDescription: "notificationAlert", handler: { alert in if alert.buttons["ڐՄ"].exists { alert.buttons["ڐՄ"].tap() return true } if alert.buttons["Allow"].exists { alert.buttons["Allow"].tap() return true } return false }) app.tap() ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 44
Slide 45
Slide 45 text
webαΠτͷදࣔ UIApplicationͷopenͰSafariΞϓϦΛ։͘ͱΕͳ͍ɻ func linkURL(string :String) { if let url = URL(string:string) { if #available(iOS 10.0, *) { UIApplication.shared.open(url) } else { UIApplication.shared.openURL(url) } } } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 45
Slide 46
Slide 46 text
WebViewͰදࣔ͠Α͏ɻ if let url = URL(string:string) { if let rootViewController = self.keyWindow?.rootViewController { let safariViewController = SFSafariViewController.init(url: url) rootViewController.present(safariViewController, animated: true, completion: nil) } } ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 46
Slide 47
Slide 47 text
XCUIͷςετ࣮ߦॱ XCTestCaseͷςετͷ࣮ߦॱϝιου໊ͷঢॱɻ ॳճىಈϢʔβʔొͳͲ࣮ߦॱ͕େࣄʹͳΔ߹ʹؾΛͭ ͚Δɻ func test4PasswordReset(){} func test3RegisterUser(){} func test2TemporaryLogin(){} func test1Tutorial() {} ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 47
Slide 48
Slide 48 text
Device Farmͷ࣮ߦॱ ϝιου࣮ॱͷԼ͔Β࣮ߦ͞ΕΔɻ ϝιου໊ͷঢॱͰͳ͍ͷͰҙʂ func test4PasswordReset(){} func test3RegisterUser(){} func test2TemporaryLogin(){} func test1Tutorial() {} ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 48
Slide 49
Slide 49 text
Α͍ςετϥΠϑΛա͝ ͠·͠ΐ͏✨ ΈΜͳ͓͏ʂ AWS Device Farm 2017/2/23 49