【RMP×Quipper】Food&Drink meetup #3 - connpass http://rmp-quipper.connpass.com/event/39082/
։ൃͷͨΊͷ։ൃ~εϚϗΞϓϦ͚e2eςετͷಋೖΛ௨ͯ͠~
View Slide
ࣗݾհ• @ainoya• ૬୩ थʢ͍͋ͷ ͳ͓͖ʣ• ~2013/8 mixi: Chef,ϓϥΠϕʔυΫϥυͷߏங• ~2015 RTC: ϓογϡ௨ج൫,ࣾFWͷอक• ~2016/3 RMP: ελσΟαϓϦӳ୯ޠɾENGLISHΤϯδχΞ• ~ࠓ RMP: ։ൃࢧԉάϧʔϓ
ٕज़ྖҬ• AWS/docker• Perl/Ruby/Java/Go/Scala/Swift• ΞϓϦ͔ΒΠϯϑϥ·Ͱઙ͘͘…
։ൃࢧԉνʔϜʹ͍ͭͯ• ϓϩμΫτ։ൃ෦ͷԣஅ৫
ϓϩμΫτ։ൃΛՃͤ͞ΔͨΊͷ։ൃ• ࣾherokuͷߏங(deis on GCP)• σʔλղੳج൫ߏஙࢧԉ• e2eςετͷݕূ(Appium/Selenium)• ݕূཧͷվળ(OpenSTFͷಋೖ)
e2eςετͷݕূɾಋೖ
ͳͥεϚϗΞϓϦͷe2eςετΛΔͷ͔
ϦϦʔεલͷQA• εϓϨουγʔτͷखॱॻΛͱʹςελʔ͕࿑ಇूతʹ࣮ࢪ
ςετέʔε͕ΒΉͱɺखಈςετʹ͔͔Δίετɾ͕͔࣌ؒʹͳΒͳ͘ͳΔ• ͕͔͔࣌ؒΔͱ͍͑ɺεϚϗΞϓϦɺϢʔβʹόάमਖ਼Λಧ͚Δ·Ͱ͕͔͔࣌ؒΔ• Ώ͑ʹWebΞϓϦΑΓQA͔ͬ͠ΓΊʹ͍ͨ͠
ࣗಈԽ͍ͨ͠• εϓϨουγʔτʹखॱॻͱ֬ೝ߲͕໌هͰ͖ΔͳΒɺਓखͰΔඞཁͳ͍ɻࣗಈԽ͢Δ͖• QAͰςελʔʹ͓ئ͍͢Δ͜ͱɺਓͰͳ͍ͱͰ͖ͳ͍ςετʢ୳ࡧతςετʣ͚ͩʹ͍ͨ͠• ࣗಈԽͰ͖ΔͳΒɺCIʹΈࠐΊQAஈ֊Ͱؾͮ͘σάϨΛૣظൃݟͰ͖ΔϝϦοτ͋Δ
ͳͥͰ͖͍ͯͳ͍ͷ͔• εϚϗΞϓϦ͚e2eςετͷٕज़ൃల్্• ֶशίετ͕ͱΜͰͳ͘ߴ͍ʢςετϑϨʔϜϫʔΫͷཧղɾ࣮ߦڥͷཧղɾςετͷॻ͖ํʣ• ϓϩμΫτ։ൃΛ͍ͯ͠ΔΤϯδχΞ͕ยखؒͰಋೖɾӡ༻͢Δͷݫ͍͠• ݁ՌɺʮΈΜͳΓ͍ͨͱࢥͬͯΔ͚Ͳ·ͩͰ͖ͳ͍ʯঢ়ଶ͕ͣͬͱଓ͍͍ͯΔ
ಋೖʹɺͬ͘͡ΓࠊΛਾ͑ͯۛຯΛ͢ΔϦιʔε͕ඞཁ։ൃج൫ۀͱͯ͠ઐͰऔΓΉ͖՝
ͱ͍͏Θ͚Ͱ͜͜ϲ݄e2eςετͷಋೖݕূʹऔΓΜͰ͖ͨ
Φʔτϝʔγϣϯ ϑϨʔϜϫʔΫςετϑϨʔϜϫʔΫe2eςετڥͷ֓؍(ਤʣ34QFD[email protected]BQQJVNTFSWFS0QFO45'4BVDFMBCT"OESPJE࣮ػ"OESPJE࣮ػ"OESPJE࣮ػJ04γϛϡϨʔλJ04γϛϡϨʔλJ04γϛϡϨʔλςετϑΝʔϜ
ΦʔτϝʔγϣϯϑϨʔϜϫʔΫ• appiumΛར༻• seleniumͱಉ͡ΠϯλϑΣʔεͰios/androidΞϓϦͷૢ࡞͕ՄೳIUUQXXXQJMMBSHMPCBMDPNTJUFTEFGBVMUpMFTBQQJVNQOH
ςετϑϨʔϜϫʔΫʢςετίʔυ෦ʣ• rspecΛ࠾༻• rubyεΫϦϓτͰ୭Ͱؾܰʹॻ͚Δͱ͍͏Λॏࢹ• ΞϓϦͱಉ͡ίʔυ(JavaSwift)Ͱॻ͔ͳ͍ͷͰɺ͏·͍͚͘ಉҰΞϓϦͷҟछϓϥοτϑΥʔϜؒͰςετίʔυΛڞ༗Ͱ͖ΔIUUQCQCMPHTQPUDPN*)9V1IZ$XJ5XL%U#4P*""""""""-")9Z4ISWM'TT$MBTT%JBHSBNQOH
ςετέʔεྫ• UIཁૉͷબ۩ମతͳૢ࡞ΛPageObjectʹدͤΔ• RSpecͷςετέʔε͕ςετγφϦΦͱͯͦ͠ͷ··ಡΊΔΑ͏ʹͳΓɺ͔Γ͍͢
androidςετϑΝʔϜ• openstfΛར༻ɻࣾͷ࣮ػݕূ্Ͱςετ࣮ߦՄೳ
iosςετϑΝʔϜ• saucelabsΛར༻ɻiosγϛϡϨʔλΛฒྻىಈͯ͠ςετߴԽ͕Ͱ͖Δ
۩ମతͳςετͷྲྀΕ• ςετγφϦΦͷ࡞• ΞϓϦૢ࡞ͷΩʔʹͳΔUIཁૉ໊ͷநग़• arc(appium ruby console)Λ༻• ςετίʔυ࡞• page objectύλʔϯΛϕʔεʹrspecͰ• ςετ࣮ߦ• openstf/saucelabs্Ͱ࣮ߦ• ςετ݁Ռͷू• εΫϦʔϯγϣοτΛػछʹ·ͱΊͯ
ը૾ࠩൺֱ(ݕূத)• Perceptual diffsʹΑΔσάϨͷݕग़ڧԽ https://github.com/uber/image-diff
ͬͯΈͯͷײ• ͖ͪΜͱӡ༻ΛճͤΕɺσάϨͷૣظൃݟʹཱͭιϦϡʔγϣϯʹͳΔ• ͔͠͠ͳ͕ΒɺεϚϗΞϓϦͷe2eςετՃͱϝϯςʹ͔ͳΓͷίετ͕͔͔Δ (Web/Seleniumͱൺ͍ͯΖ͍Ζൃల్্ʣ• ϢχοτςετͷΑ͏ʹ։ൃऀ͕ؾܰʹॻ͘ͷ·͍ͩ͠• ·ͱΊͯ࣌ؒΛऔͬͯςετॻ͘ͷΛ͕ΜΔ͔ɺઐଐςετΤϯδχΞ͕·ͱΊͯॻ͘ͷ͕ݱ࣮తͱײͨ͡• ςετέʔε૿͗ͣ͢͠࠷ݶʹͱͲΊΔͷ͕·͍͠ʢϝϯςίετͷ؍Ͱʣ
͓ΘΓʹɿ։ൃͷͨΊͷ։ൃ• ֤ϓϩμΫτͷٕज़తෛ࠴ɺجຊతʹ֤νʔϜͷΤϯδχΞ͕ͨͪࣄऀͱͯ͠ฦࡁ͢Δ• ͕ɺͲ͏ͯ͜͠΅Εٿൃੜͯ͠͠·͏• νʔϜʹ͍Δͱݟ͍͑ͯͳ͍ࢹ͋Δ• ։ൃج൫άϧʔϓʢ෦ԣஅ৫ʣ͕͜΅ΕٿΛर͍ʹߦ͘• ϓϩμΫτ։ൃͷڞ௨՝Λநग़ͯ͠ղܾʹऔΓΉ• ʮΈΜͳΓ͍ͨͱࢥͬͯΔ͚Ͳ·ͩղܾͰ͖͍ͯͳ͍՝ʯ͕Γଓ͚Δঢ়ଶΛແ͘͢• e2eςετͷಋೖݕূͦͷҰ
We are Hiringʂ• Γ͍ͨ͜ͱଞʹͨ͘͞Μ͋Δɺๅͷࢁ• ϚʔέςΟϯάΦʔτϝʔγϣϯج൫• σʔλղੳج൫• ηΩϡϦςΟϚωδϝϯτ• ಈը࠶ੜج൫• R&Dʢػցֶशɾਂֶशetc..)• ্هͷΩʔϫʔυʹͽΜͱདྷͨํɺҰॹʹ՝ղܾʹऔΓΜͰ͘ΕΔํΛืूத
e2eςετ͡ΊΔͳΒandroid͔Β͕͓͢͢Ί• iOSͷॾʑͷڍಈ͕͘ɺςετέʔεΛॻ͘ͷʹ͕͔͔࣌ؒΔ• appium͔Βͷૢ࡞͕͍ɺpageΦϒδΣΫτ͕औΓͮΒ͍ɺaccessiblity identifierΛઃఆͯ͠͏·͘ཁૉ͕ͱΕͳ͍ɺetc…• Androidͷ΄͏͕ॾʑૢ࡞͘͢͠ɺ͘͘͞͞ςετέʔεॻ͚Δ• appiumͷԠૣ͍ɻମײͰiOSͷഒҎ্ͷ͞Ͱॻ͚Δ• ͱ͘ʹAndroid/iOS྆ํల։͍ͯ͠ΔΞϓϦͷ߹ɺ·ͣAndroid൛ͰςετέʔεΛͤ͞ΔˠiOSʹςετέʔεҠ২͕ޮ͕ྑ͍ͱײͨ͡