I considered about what a UI test is.
͋ͳ͕ͨUIςετͰධՁ͍ͨ͠ͷɹԿͰ͔͢ʁ
View Slide
ࣗݾհ!ۄ৴ޛ iOS EngineerTesting/CIɾCD/HomeKit/IoTOrganized try!Swift Tokyo 2019Hosting Roppongi.swift
PEAKS͞Μ͔ΒʮiOSςετશॻʯΛग़͢͜ͱʹͳΓ·ͨ͠
Ͱɺ࢝Ί·͢
ఆٛʹϒϨΛײͨ͡ࣄͳ͍Ͱ͔͢ʁ
*ςετ
*ςετγεςϜςετ/౷߹ςετ/݁߹ςετ/࿈݁ςετ/֎෦݁߹ςετ/෦݁߹ςετ/ΠϯςάϨʔγϣϯςετ/֎෦ςετ/෦ςετ/ػೳςετ/E2Eςετ/Ϣχοτςετ/୯ମςετ/ετϨεςετ/ಈతςετ/੩తςετ/ϗϫΠτϘοΫεςετ/ϒϥοΫϘοΫεςετ/Ϣʔβʔςετ/डೖςετ/UIςετ/୳ࡧతςετ/ಉΫϥεςετ/ڥքςετ/σγδϣϯςʔϒϧςετ/Έ߹Θͤςετ/ঢ়ଶભҠςετ/σʔλϑϩʔςετ/ΞυϗοΫςετ/ABςετ/ϦάϨογϣϯςετ/ճؼς
ςετʹؔΘΔ༻ޠςετٕ๏/ςετܭը/ςετ߲/ςετΞΠςϜ/ςετγφϦΦ/ςετεΟʔτ/ςετϨϕϧ/ςετϓϩηε/ςετ؍/ςετઃܭ/ςετੳ/ςετఔ/ςετΧόϨοδ/ςετϕʔε/ελϒ/ϞοΫ/ςετμϒϧ/SUT/όά/ෆ۩߹/ܽؕ/ނো/ϑΥʔϧτ/ςεςΟϯά/νΣοΩϯά/ඇػೳςετ/ςετλΠϓ/ςετۦಈ։ൃ/TDD/ςετϋʔωε/.....
༨ஊ: JSTQBͱ͔ͬͯΈΔͱָ͍͠Αhttp://jstqb.jp
ؓٳ
ςετϐϥϛου• UI• Service• Unit
UIςετΓ͍ͨਓ
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("loggedIn")app.launchArguments.append(contentsOf: ["-key", "abc111222333"])app.launchArguments.append(contentsOf: ["-skipLogin", "YES"])app.launchEnvironment["TestMode"] = "UITest"
֎෦γεςϜͱͷ࿈ܞ֎෦γεςϜͷ෦ΛϞοΫ·ͨελϒͯ͠ಈ࡞ͤ͞Δ• Embassy• SBTUITestTunnel• Wiremock
⚠ɹ͜ΕΒͷํ๏ΛऔΔࣄͰϢʔβͷૢ࡞͔Βԕ͔͟Γ·͢
༻๏༰ྔΛकͬͯਖ਼͘͠ޮՌతͰ͋ΔςετΛࢦ͠·͠ΐ͏ɻ
UIςετ͍ͭΔͷʁ• جຊతʹϢχοτςετͳͲͷςετϐϥϛουͷԼ͔ΒੵΈ্͛ͯߦ͘ͷ͕͍͍• ↑Λཧղ্ͨ͠ͰUIςετͰΧόʔ͢ΔͷѱͰͳ͍• ϨΨγʔίʔυͷ߹ɺϢχοτςετͷͨΊʹϦϑΝΫλϦϯά͕ඞਢʹͳΔ͕UIςετԿͱ͔͔͚Δ߹͋Δ
·ͱΊ• UIςετͳͲͷݴ༿ఆ͕ٛϒϨ͕ͪͳͷͰ࣠Λ࡞Ζ͏• ఆٛʹଊΘΕΔඞཁͳ͍ɺجຊΛԡ্͑ͨ͞ͰͷΞϨϯδ͍͍ͬͯͱࢥ͏Αʁ• ޮՌతͩͱࢥ͑ࢼͯ͠ΈΕ͍͍͠ɺτϥΠΞϯυΤϥʔͯ͠վળ͍͖ͯ͠·͠ΐ͏
Ҏ্