Slide 1

Slide 1 text

Ge#ng&Started&With Firebase(Test(Lab(for(Android @Horie1024 2016/9/30(Android(Tes2ng(Bootcamp(#4 ©"VASILY,"Inc.,"2016 1

Slide 2

Slide 2 text

About&Me • Ryosuke)Horie)@Horie1024 • →)ͷௗͷΞΠίϯͰ͢ • VASILY,)Inc. • Android)Developer • iQONͱ͍͏ΞϓϦΛ։ൃ͍ͯ͠·͢ɻ ©"VASILY,"Inc.,"2016 2

Slide 3

Slide 3 text

©"VASILY,"Inc.,"2016 3

Slide 4

Slide 4 text

ࠓ೔ͷൃදͰΘ͔Δ͜ͱ • Firebase)Test)LabͰͷςετͷ࣮ߦํ๏ ©"VASILY,"Inc.,"2016 4

Slide 5

Slide 5 text

ൃදͷྲྀΕ • Firebase)Test)Labͱ͸ʁ • ར༻͢ΔͨΊͷ४උ • ςετͷ࣮ߦ • ςετ݁Ռͷ֬ೝ • CLIͰͷ࣮ߦͱCIγεςϜͱͷ࿈ܞ ©"VASILY,"Inc.,"2016 5

Slide 6

Slide 6 text

Firebase(Test(Labͱ͸ʁ ©"VASILY,"Inc.,"2016 6

Slide 7

Slide 7 text

Firebase(Test(Labͱ͸ʁ • Google'I/O'2016ͰFirebaseͷҰػೳͱͯ͠ެ։ • چCloud'Test'Lab • Ϋϥ΢υϕʔεͷAndroidΞϓϦͷςετج൫ • Googleͷσʔληϯλʔ্ͰՔಇ͢Δ୺຤ͰςετΛ࣮ߦ ©"VASILY,"Inc.,"2016 7

Slide 8

Slide 8 text

Firebase(Test(Labͷಛ௃ • ࣮ػͰͷςετ͕Մೳ • Googleͷσʔληϯλʔʹ഑ஔ͞Ε࣮ͨػͰςετ͕࣮ߦ • ςετίʔυෆཁͰςετ͕Մೳ • Test*Lab͕ΞϓϦΛղੳ͠Ϣʔβʔͷૢ࡞ΛγϛϡϨʔτ • ։ൃϑϩʔ΁ͷ౷߹͕༰қ • ༷ʑͳςετͷ࣮ߦํ๏Λ༻ҙ ©"VASILY,"Inc.,"2016 8

Slide 9

Slide 9 text

࣮ߦՄೳͳςετख๏ • Instrumenta+onςετ • Roboςετ ©"VASILY,"Inc.,"2016 9

Slide 10

Slide 10 text

Instrumenta*onςετ • ҎԼ3छͷϑϨʔϜϫʔΫʹରԠ • Espresso • Robo+um • UI0Automator02.0 ©"VASILY,"Inc.,"2016 10

Slide 11

Slide 11 text

Roboςετ • ςετίʔυෆཁͳE2Eςετ • ΞϓϦͷUIߏ଄Λղੳɾ୳ࡧ • Ϣʔβʔͷૢ࡞ΛγϛϡϨʔτ ©"VASILY,"Inc.,"2016 11

Slide 12

Slide 12 text

Roboςετ • Monkey(testͱ͸ڍಈ͕ҟͳΔ • ࣮ߦͷ౓ʹϥϯμϜͳૢ࡞͕ߦΘΕΔΘ͚Ͱ͸ͳ͍ • RoboςετͰγϛϡϨʔτ͞ΕΔૢ࡞ʹ͸࠶ݱੑ͕͋Δ • σόΠεͷઃఆ౳ͷύϥϝʔλ͕ಉ͡ͳΒ͹ৗʹಉ͡ ©"VASILY,"Inc.,"2016 12

Slide 13

Slide 13 text

Roboςετͷ੍ݶ • ϩάΠϯɾೝূॲཧΛᷖճͰ͖ͳ͍ • UnityඇରԠ • ಠࣗͷςετεΫϦϓτͷఆٛෆՄ ©"VASILY,"Inc.,"2016 13

Slide 14

Slide 14 text

RoboςετͰͷೝূॲཧ • System(PropertyͰΞϓϦ͕TestLabͰ࣮ߦத͔Λ൑ผ • TestLabͷ৔߹ͷΈαΠϯΠϯɺϩάΠϯΛεΩοϓͳͲՄೳ String testLabSetting = Settings.System.getString(context.getContentResolver(), "firebase.test.lab"); if ("true".equals(testLabSetting)) { // Test LabͰͷ࣮ߦதʹߦ͏ॲཧ } ©"VASILY,"Inc.,"2016 14

Slide 15

Slide 15 text

ςετͷ࣮ߦํ๏ • Firebase)console • Android)Studio • CLI • Pre7launch)report(RoboςετͷΈ) • Play΁ͷα,)βͰͷAPKΞοϓϩʔυ࣌ʹࣗಈ࣮ߦ ©"VASILY,"Inc.,"2016 15

Slide 16

Slide 16 text

ςετͷ࣮ߦํ๏ • Pre%launch,report • ՝ۚແ͠Ͱ࢖༻Մ • Developer,console͔ΒΦϓτΠϯ ©"VASILY,"Inc.,"2016 16

Slide 17

Slide 17 text

ར༻͢ΔͨΊͷ४උ ©"VASILY,"Inc.,"2016 17

Slide 18

Slide 18 text

FirebaseͷϓϩδΣΫτΛ࡞੒ • Firebase)console͔Β࡞੒ ©"VASILY,"Inc.,"2016 18

Slide 19

Slide 19 text

՝ۚ • ՝ۚ • BlazeϓϥϯΛબ୒ ©"VASILY,"Inc.,"2016 19

Slide 20

Slide 20 text

ར༻։࢝ ©"VASILY,"Inc.,"2016 20

Slide 21

Slide 21 text

ςετͷ࣮ߦ ©"VASILY,"Inc.,"2016 21

Slide 22

Slide 22 text

ςετ࣮ߦ·ͰͷྲྀΕ • Firebase)console͔Βͷ࣮ߦͷ৔߹ • ςετख๏ͷܾఆ • APKͷΞοϓϩʔυ • ςετ৚݅ͷઃఆ • ςετͷ࣮ߦ ©"VASILY,"Inc.,"2016 22

Slide 23

Slide 23 text

ςετख๏ͷܾఆ • Roboςετ%or%Instrumenta/onςετ ©"VASILY,"Inc.,"2016 23

Slide 24

Slide 24 text

APKͷΞοϓϩʔυ • Roboςετͷ৔߹௨ৗͷAPK ©"VASILY,"Inc.,"2016 24

Slide 25

Slide 25 text

APKͷΞοϓϩʔυ • Instrumenta+onςετͷ৔߹ • ௨ৗͷAPK0+0ςετAPK͕ඞཁ • ҎԼͷίϚϯυͰςετAPKΛੜ੒ $ ./gradlew assembleDebugTest ©"VASILY,"Inc.,"2016 25

Slide 26

Slide 26 text

ςετ৚݅ͷઃఆ • ςετ৚݅ͷઃఆ͸Roboςετɺ Instrumenta.onςετͰڞ௨ • ৄࡉઃఆʹ͸͕ࠩ͋Γ • ઃఆͷ֓೦͕গ͠Θ͔Γʹ͍͘ ©"VASILY,"Inc.,"2016 26

Slide 27

Slide 27 text

ςετ৚݅ͷઃఆʹඞཁͳ֓೦ • Test%Dimension • σόΠεɺAPIϨϕϧɺϩέʔϧɺը໘ͷ޲͖ͳͲ • Test%Execu/on • ༗ޮͳTest)Dimensionͷ૊߹ͤ • Test%Matrix • Test)Execu3onͷϦετ ©"VASILY,"Inc.,"2016 27

Slide 28

Slide 28 text

Test%Dimensionͷબ୒ྫ • σόΠε:#Nexus#4,#Nexus#5,#Nexus#7 • APIϨϕϧ:#21,#22 • ϩέʔϧ:#Japanese • ը໘ͷ޲͖:#ॎ޲͖ ©"VASILY,"Inc.,"2016 28

Slide 29

Slide 29 text

Test%Matrix • Test&Execu+on • ༗ޮͳTest&Dimensionͷ૊߹ͤ • Nexus&7͕APIϨϕϧ22ʹඇରԠ • Nexus&7&+&APIϨϕϧ22͸εΩοϓ • Test&Matrix͸Test&Execu+onͷϦετ • Test&Matrixʹैͬͯςετ͕࣮ߦ ©"VASILY,"Inc.,"2016 29

Slide 30

Slide 30 text

RoboςετͷΦϓγϣϯ • Timeout • Maximum+depth(࠷େਂ౓) • RoboςετͰͷΈબ୒Մೳͳ߲໨ • Roboςετͷνϡʔχϯά͸͜ͷ2߲ ໨Λௐ੔1 1"h$ps:/ /firebase.google.com/docs/test6lab/robo6ux6 test#configuringrobotest ©"VASILY,"Inc.,"2016 30

Slide 31

Slide 31 text

Roboςετͷ༻ޠ • Depth • ը໘ͷ֊૚ͷਂ͞ • Maximum-depthͰ୳ࡧͷݶ౓Λࢦఆ • Root • ϝΠϯεΫϦʔϯ • UI-Branch • ࢬ෼͔Εͨ͠ը໘ભҠͷ෼ذ ©"VASILY,"Inc.,"2016 31

Slide 32

Slide 32 text

ςετͷ࣮ߦ • Test&DimensionΛબ୒ • Լ෦ͷςετΛ։࢝ϘλϯΛΫϦοΫ ©"VASILY,"Inc.,"2016 32

Slide 33

Slide 33 text

ςετ݁Ռͷ֬ೝ ©"VASILY,"Inc.,"2016 33

Slide 34

Slide 34 text

ςετ݁Ռͷ֬ೝ • Test&Execu+onຖʹ݁ՌΛ֬ೝՄೳ • ϩά • εΫϦʔϯγϣοτ • ಈը • Cloud&Storageʹอଘ • อଘظؒ͸ςετ࣮ߦޙ90೔ؒ ©"VASILY,"Inc.,"2016 34

Slide 35

Slide 35 text

ςετ݁Ռͷ֬ೝ • Roboςετͷ৔߹ΞΫςΟϏςΟϚο ϓ͕දࣔ% ©"VASILY,"Inc.,"2016 35

Slide 36

Slide 36 text

CLIͰͷ࣮ߦͱCIγεςϜͱͷ࿈ܞ ©"VASILY,"Inc.,"2016 36

Slide 37

Slide 37 text

CLIͰͷ࣮ߦ • gcloudίϚϯυϥΠϯπʔϧΛ࢖༻ $ gcloud beta test android run \ --type robo \ --app app-debug.apk \ --device-ids Nexus5 \ --os-version-ids 21 \ --locales ja_JP \ --orientations portrait \ --timeout 90s ©"VASILY,"Inc.,"2016 37

Slide 38

Slide 38 text

CLIͰͷ࣮ߦ • ৄࡉ͸Qiitaʹ·ͱΊ͍ͯ·͢ɻ Firebase(Test(LabͰͷAndroidΞϓϦͷςετΛCLI͔Β࣮ߦ͢Δ ©"VASILY,"Inc.,"2016 38

Slide 39

Slide 39 text

CIγεςϜͱͷ࿈ܞ • CLI͔Β࣮ߦͰ͖ΔͷͰCIͷϏϧυ͔Β΋࣮ߦՄೳ • CIͷϏϧυͰgcloudπʔϧ͔ΒςετΛ࣮ߦ ©"VASILY,"Inc.,"2016 39

Slide 40

Slide 40 text

CircleCIͰͷྫ 1. ίʔυͷมߋΛίϛοτ͠ϦϙδτϦʹϓογϡ 2. CircleCI͕มߋΛݕ஌͠ϏϧυΛ։࢝ 3. gcloudίϚϯυϥΠϯπʔϧͷઃఆɺೝূॲཧ 4. apk͓Αͼςετapkͷ࡞੒ 5. Firebase8Test8LabʹΑΔςετͷ࣮ߦ ©"VASILY,"Inc.,"2016 40

Slide 41

Slide 41 text

gcloudπʔϧ • CirlceCIͰ͸σϑΥϧτͰ༻ҙ • ϓϩδΣΫτͷઃఆɺcomponentsͷupdateΛߦ͏ඞཁ͋Γ • JSONαʔϏεΞΧ΢ϯτΩʔͰͷೝূ ©"VASILY,"Inc.,"2016 41

Slide 42

Slide 42 text

CircleCIͷઃఆ • base64Τϯίʔυͨ͠JSONαʔϏεΞΧ΢ϯτΩʔΛ؀ڥม਺ʹొ࿥ ©"VASILY,"Inc.,"2016 42

Slide 43

Slide 43 text

gcloudπʔϧͷೝূ ؀ڥม਺ʹొ࿥ͨ͠ΩʔΛJSONϑΝΠϧʹσίʔυ $ echo $CLIENT_SECRET | base64 --decode > ${HOME}/client-secret.json ©"VASILY,"Inc.,"2016 43

Slide 44

Slide 44 text

gcloudπʔϧͷೝূ gcloud auth activate-service-accountͰೝূ $ gcloud auth activate-service-account --key-file ${HOME}/client-secret.json ©"VASILY,"Inc.,"2016 44

Slide 45

Slide 45 text

CIγεςϜͱͷ࿈ܞ • ৄࡉ͸Qiitaʹ·ͱΊ͍ͯ·͢ɻ CircleCI͔ΒFirebase,Test,LabͰͷςετΛ࣮ߦ͢Δ ©"VASILY,"Inc.,"2016 45

Slide 46

Slide 46 text

·ͱΊ • Firebase)Test)LabΛ࢖͍࢝ΊΔͷ͸ൺֱత؆୯ • Roboςετ͸ศར͕ͩೝূॲཧͷ໰୊͕େ͖͍ • ೔ຊ੡୺຤͕ແ͍ͷͰࠓޙͷ௥Ճʹظ଴ ©"VASILY,"Inc.,"2016 46

Slide 47

Slide 47 text

࠷ޙʹ • ຊൃද಺༰ͷৄࡉ͸ฐࣾDeveloper)Blogʹ·ͱΊͯ͋Γ·͢ɻ • Firebase)Test)LabΛ࢖ͬͨAndroidΞϓϦͷςετ ©"VASILY,"Inc.,"2016 47

Slide 48

Slide 48 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ ©"VASILY,"Inc.,"2016 48