I spoke it at Hakata Test Night
͋ͳ͕ͨUIςετͰධՁ͍ͨ͠ͷɹԿͰ͔͢ʁ
View Slide
ࣗݾհ!ۄ৴ޛWork as iOS Engineer & Manager for OrigamiOrganize try!Swift Tokyo 2020co-auther of iOSςετશॻ
ݴ༿ͷఆٛʹϒϨΛײͨ͡ࣄͳ͍Ͱ͔͢ʁ
ͳΜͪΌΒςετ
ͳΜͪΌΒςετγεςϜςετ/౷߹ςετ/݁߹ςετ/࿈݁ςετ/֎෦݁߹ςετ/෦݁߹ςετ/ΠϯςάϨʔγϣϯςετ/֎෦ςετ/෦ςετ/ػೳςετ/E2Eςετ/Ϣχοτςετ/୯ମςετ/ετϨεςετ/ಈతςετ/੩తςετ/ϗϫΠτϘοΫεςετ/ϒϥοΫϘοΫεςετ/Ϣʔβʔςετ/डೖςετ/UIςετ/୳ࡧతςετ/ಉΫϥεςετ/ڥքςετ/σγδϣϯςʔϒϧςετ/Έ߹Θͤςετ/ঢ়ଶભҠςετ/σʔλϑϩʔςετ/ΞυϗοΫςετ/ABςετ/ϦάϨογϣϯςετ/ճؼς
ςετʹؔΘΔ༻ޠςετٕ๏/ςετܭը/ςετ߲/ςετΞΠςϜ/ςετγφϦΦ/ςετεΟʔτ/ςετϨϕϧ/ςετϓϩηε/ςετ؍/ςετઃܭ/ςετੳ/ςετఔ/ςετΧόϨοδ/ςετϕʔε/ελϒ/ϞοΫ/ςετμϒϧ/SUT/όά/ෆ۩߹/ܽؕ/ނো/ϑΥʔϧτ/ςεςΟϯά/νΣοΩϯά/ඇػೳςετ/ςετλΠϓ/ςετۦಈ։ൃ/TDD/ςετϋʔωε/.....
༨ஊ: JSTQBͱ͔ͬͯΈΔͱָ͍͠Αhttp://jstqb.jp
ؓٳ
ςετϐϥϛου• UI• Service• Unit
UIςετͱͳΜͩΖ͏ʁ• XCUITestΛ༻ͯ͠ߦ͏ςετશͯUIςετʁ• UIʹϑΥʔΧεͨ͠ςετΛߦ͏ςετʁ
UIςετͱͳΜͩΖ͏ʁ• UIʹϑΥʔΧεͨ͠ςετΛߦ͏ςετʁ
UIςετͱͳΜͩΖ͏ʁ• UIʹϑΥʔΧεͨ͠ςετΛߦ͏ςετʁ• ධՁ͍ͨ͠ͷ͕ը໘ɾUIίϯϙʔωϯτͳͲʹͷΈͰ͋ΕϓϨθϯςʔγϣϯʹର͢Δ୯ମɾ݁߹ςετ
UIςετͱͳΜͩΖ͏ʁ• ্ͷʹߦ͘΄Ͳෳࡶɾ݁߹͕૿Ճ
UIʹର͢Δςετͱ͍͏ΑΓUIΛͬͨςετ
UIΛ͏ςετͱ• E2Eςετ• ϒϩʔυελοΫςετ• γεςϜςετ• ૯߹ςετ
͜͜·ͰUIςετͷೝࣝ߹Θͤ
ԿΛςετ͍ͨ͠ͷ͔࠶ͼࢥ͍ग़ͯ͠ΈΔ
ԿΛςετ͍ͨ͠ͷ͔࠶ͼࢥ͍ग़ͯ͠ΈΔ1. UIʹϑΥʔΧεͨ͠ςετΛ͍ͨ͠2. UIΛ͏ςετΛ͍ͨ͠
▶︎1. UIʹϑΥʔΧεͨ͠ςετΛ͍ͨ͠
XCUITestͰͳ͚Εग़དྷͳ͍ࣄ͔ʁ• ViewͷαΠζͦͷ্ʹࡌͬͯΔίϯϙʔωϯτͷҐஔͳͲϢχοτςετͰςετՄೳ• εΫϦʔϯγϣοτͳͲʹΑΔը૾ͰͷධՁ• iOSSnapshotTestcasehttps://github.com/uber/ios-snapshot-test-case
▶︎2. UIΛ͏ςετΛ͍ͨ͠
༷ʑͳཁҼ͕ςετΛͮ͠Β͘͢Δ• ΞϓϦ෦ͷঢ়ଶมԽ• ֎෦γεςϜͱͷ࿈ܞ
ΞϓϦ෦ͷঢ়ଶมԽΛ੍ޚ͢ΔlaunchArgumentslaunchEnvironmentΛͬͯىಈ࣌ʹঢ়ଶͷ੍ޚΛߦ͏let app = XCUIApplication()app.launchArguments.append("UITest")app.launchEnvironment["GyozaAccessToken"] = "GY0Za15PERfECTF00D"app.launchEnvironment["DidAgreeTos"] ɹɹɹ= "1"
ΞϓϦ෦ͷঢ়ଶมԽΛ੍ޚ͢ΔখωλXCUIApplicationͷextensionͰݻ༗ͷઃఆΛΈ͘͢͢Δlet app = XCUIApplication()app.uitest().isLoggedIn().didAgreeTos().launch()
֎෦γεςϜͱͷ࿈ܞ֎෦γεςϜͷ෦ΛϞοΫ·ͨελϒͯ͠ಈ࡞ͤ͞Δ• Embassy• SBTUITestTunnel• Wiremock
⚠ɹ͜ΕΒͷํ๏ΛऔΔࣄͰϢʔβͷૢ࡞͔Βԕ͔͟Γ·͢
༻๏༰ྔΛकͬͯਖ਼͘͠ޮՌతͳςετΛࢦ͠·͠ΐ͏ɻ
UIςετ͍ͭΔͷʁ• ݪଇͱͯ͠ϢχοτςετͳͲͷςετϐϥϛουͷԼ͔ΒੵΈ্͛ͯߦ͘ํ͕·͍͠ʢROI͕ߴ͍ʣ• ↑Λཧղ্ͨ͠ͰUIςετͰΧόʔ͢ΔͷѱͰͳ͍ɻϦϑΝΫλϦϯάલͷϨΨγʔίʔυΛUIςετʹΑͬͯ୲อ্ͨ͠ͰɺϦϑΝΫλϦϯάޙʹϢχοτςετΛॻ͘
·ͱΊ• UIςετͳͲͷݴ༿ఆ͕ٛϒϨ͕ͪͳͷͰ࣠Λ࡞Ζ͏• ݪଇʹଊΘΕΔඞཁͳ͍ɺجຊΛԡ্͑ͨ͞ͰͷΞϨϯδ͍͍ͬͯɺޮՌతͩͱࢥ͑ࢼͯ͠ΈΕ͍͍͠ɺτϥΠΞϯυΤϥʔͯ͠վળ͍͖ͯ͠·͠ΐ͏
Ҏ্