Upgrade to Pro — share decks privately, control downloads, hide ads and more …

android-app-ui-testing

 android-app-ui-testing

DevOps勉強会#2 (https://zawatt.doorkeeper.jp/events/27232 ) で発表した資料です。

B60a006ba96c36b345bb67fe2f5799a9?s=128

muran001

July 20, 2015
Tweet

Transcript

  1. "OESPJEΞϓϦͷ6*ςετΛ  %FW0QTษڧձ!౦ژ  .BTBUPTIJ.VSBLBNJ $JSDMF$*ͰͿΜճ͢

  2. NVSBO .BTBUPTIJ.VSBLBNJ -JWFOTF *OD

  3. 2JJUB΍ͬͯ·͢ʂ

  4. ຊ೔ͷ͋Β͢͡     UIテスト ͜͜Β΁Μ

  5. ΞϓϦͷಈ࡞֬ೝؤுͬͯ·͔͢ʁ

  6. ਓւઓज़Ͱ΍ͬͯ·͢ʂʢΩϦο εΫϦʔϯγϣοτࡱͬͯ&YDFMʹʜ

  7. ਖ਼௚μα͍ɺͦͯ͠πϥ͍

  8. ΠέͯΔ΍Γํ͸ͳ͍ͷ͔ʁ

  9. ࣗಈ 6*ςετͰ͠ΐʂʂ  ʢ਒͑੠

  10. "OESPJEͷ6*ςετ •  3PCPUJVN •  &TQSFTTP •  6*"VUPNBUPS •  "QQJVN • 

    ɾɾɾ  ΤϛϡϨʔλΛ࢖ͬͯࣗಈͰಈ࡞֬ೝ
  11. &TQSFTTP࢖ͬͨྫ @RunWith(AndroidJUnit4.class) public class EspressoTest extends ActivityInstrumentationTestCase2<TopActivity> { 〜略〜 @Test

    public void squareTest() { onView(withId(R.id.result_text)).check(match(withText(“2”))); onView(withId(R.id.square_button)).perform(click()); onView(withId(R.id.result_text)).check(match(withText(“4”))); } 〜略〜 } テスト対象   特定の要素に テスト内容   特定の文字列が表示されている
  12. &TQSFTTPͷ࣮ߦ $ ./gradlew connectedAndroidTest &TQSFTTPͷ݁Ռ֬ೝ $ open app/build/outputs/reports/androidTests/connected/index.html

  13. ෳ਺ಉ࣌ςετ (*'Ξχϝʣ  BOESPJE   BOESPJE   BOESPJE

     ಛผͷઃఆෆཁɻςετલʹෳ਺ΤϛϡϨʔλىಈ͢Δ͚ͩ
  14. Ϩϙʔτྫ

  15. ϨϙʔτΠέͯͳ͍ɹʕ→ᴥ←ʔ

  16. ΠέͯΔϨϙʔτπʔϧ4QPPO ҆৺ͷ4RVBSF੡ 

  17. 4QPPOͷ͍͍ͱ͜Ζ •  σόΠεʢΤϛϡϨʔλʣຖʹϨϙʔτ෼͚ •  ςετ಺ͰεΫϦʔϯγϣοτΛࡱΕΔ •  εΫϦʔϯγϣοτΛϨϙʔτʹฒ΂ͯ͘ΕΔ •  εΫϦʔϯγϣοτΛ(*'Ξχϝʹͯ͘͠ΕΔ • 

    ৄࡉϩά΋ݟ΍͍͢ •  ɾɾɾ
  18. 4QPPOͷϨϙʔτྫ̍

  19. 4QPPOͷϨϙʔτྫ̎

  20. ͜ΕͰΞϓϦ։ൃָ͕͘͠ͳͬͨʁ

  21. ͍͍͑ɺͦΕ͕ۤ೰ͷ࢝·ΓͰͨ͠

  22. •  ෳ਺ಉ࣮࣌ߦͯ͠.BDCPPL͕͓ͪΔ •  ࣮ߦͷ౓ʹϨϙʔτ͕౎౓ΫϦΞ͞ΕΔ •  εΫϦʔϯϩοΫঢ়ଶͩͱࣦഊ͢Δʢෳ਺୆ղআ໘౗ʣ •  ϩʔΧϧͰ࣮ߦͯ͠΋ଞͷ։ൃऀͱ݁Ռڞ༗Ͱ͖ͳ͍ʢࣗݾຬʣ •  ɾɾɾɾ

    6*ςετʹཱͪ͸͔ͩΔน ࣗ෼ͷ1$Ͱ΍Ζ͏ͱ͢Δͱ
  23. ͦΕ $*ͰղܾͰ͖ͳ͍ͷʁ

  24. +FOLJOT࢖͏ʁ "OESPJE&NVMBUPS1MVHJO͕ෆ҆ఆ ͦ΋ͦ΋+FOLJOTΠέͯͳ͍

  25. ΞϓϦ։ൃͱ͍͑͹$JSDMF$*Ͱ͠ΐʂ

  26. ਏ͍֨ಆͷ࢝·Γ

  27. ֨ಆ̍  ϔουϨεͳΤϛϡϨʔλʔߏங ը໘ͳ͠ͷΤϛϡϨʔλͬͯ࡞ΕΔͷʁ

  28. ΤϛϡϨʔλ࡞੒ $ echo n | android create avd --force –name

    my-android-21 --target android-21 ΤϛϡϨʔλΛϔουϨεىಈ $ emulator -avd circleci-android-21 -no-skin -no-audio -no-window & ҰԠͰ͖Δ͜ͱ͕Θ͔ͬͨ
  29. ΤϛϡϨʔλىಈ଴ͪ $ adb shell getprop init.svc.bootanim stopped ىಈ׬ྃ ʹϒʔτΞχϝʔγϣϯ͕ऴྃ ʹJOJUTWDCPPUBOJNϓϩύςΟ͕TUPQQFE

    #!/bin/bash 〜略〜 STATUS=$(adb shell getprop init.svc.bootanim | tr –d [:space:]) while [ ”$STATUS" != “stopped" ]; do sleep 2 STATUS=$(adb shell getprop init.svc.bootanim | tr -d [:space:]) done BECXBJUGPSEFWJDF͸࢖͑ͳ͍ͷͰఆظతʹঢ়ଶ؂ࢹ TUPQQFEʹͳΔ·Ͱ̎ඵ͓͖ʹ֬ೝ ˠىಈ͖͠Βͳ͍ͱςετΛ౤ೖͰ͖ͳ͍
  30. εΫϦʔϯϩοΫղআ $ adb shell input keyevent 82 ͳΜ͔ͨ·ʹ͜Ε͕Ͱ͖ͳ͍৔߹͕͋Δ͚ͲṖ ΩʔΠϕϯτΛൃߦ͠ϩοΫΛղআ ˠىಈ׬ྃͯ͠΋ϩοΫ͞Εͨ··ͳΒςετ౤ೖͰ͖ͳ͍ʢϔουϨε͔ͩΒؾ͖ͮʹ͍͘55

  31. ࣮ͦͯ͠ߦͯ͠ΈΔͱɾɾɾ   ςετམͪΔ ཧ༝ •  ը໘αΠζখ͔͗ͨ͢͞Β •  4%ΧʔυྖҬͳ͔͔ͬͨΒ

  32. ΤϛϡϨʔλʔىಈΛௐ੔͢Δ $ echo n | android create avd --force –name

    my-android-21 --target android-21 -c 50M -s WXGA800 ͜ΕͰແࣄϩʔΧϧ؀ڥͰϔουϨεͳςετ͕௨Γ·ͨ͠ ը໘αΠζɺ4%Χʔυ༰ྔΛࢦఆ
  33. ֨ಆ̎  $JSDMF$*Ͱ࣮ߦ $JSDMF$*ͰϔουϨεͳςετͰ͖Μͷʁ

  34. DJSDMFZNM࡞੒ʢͳ͍΋ͷ௥Ճʣ # circle.yml 〜 略 〜 dependencies: pre: - echo y

    | android update sdk --no-ui --all --filter "extra-android-m2repository" - echo y | android update sdk --no-ui --all --filter "extra-android-support" - echo y | android update sdk --no-ui --all --filter "extra-google-m2repository” 〜 略 〜 ˠϓϦΠϯετʔϧͯ͠Δͬͯॻ͍ͯ͋Δͷʹೖͬͯͳ͔ͬͨ ϓϦΠϯετʔϧ࣮͸͞Εͯͳ͔ͬͨ΋ͷΛΠϯετʔϧ
  35. ෳ਺୆ΤϛϡϨʔλىಈ଴ͪ   $  circle-­‐android  wait-­‐for-­‐boot   ࣮͸༻ҙ͞Ε͍ͯͨɻͰ΋̍୆෼ ෳ਺୆͋Δ৔߹ɺ શ୆ىಈ׬͔ྃͯ͠Βςετ౤ೖ͢Δඞཁ͋Γ

    Ͳ͏͢Δʂʁʁ ˠىಈ଴ͪεΫϦϓτ࣮͸͋ͬͨʂʂͰ΋̍୆෼ͷΈରԠͩͬͨɾɾɾ
  36. ෳ਺୆ΤϛϡϨʔλىಈ଴ͪ   XBJUGPSCPPUΛෳ਺୆ʹରԠͤ͞Δํ๏͋Δʁ ͋ͬͨΒڭ͑ͯ͘Μͳ͍ʁ ͶʔΑLTHʂ ͨͩͷγΣϧεΫϦϓτ͔ͩΒࣗ෼Ͱվ଄͠Ζ ࢲ தͷਓ தͷਓʹνϟοτͰ໰͍߹ΘͤͯΈͨɾɾɾɾ

    ʀТʀʆ ŲƄƂŕ ࢲ
  37. ෳ਺୆ΤϛϡϨʔλىಈ଴ͪ   ࢓ํͳ͘࡞ͬͨɾɾɾৄࡉ͸8&#Ͱ # 複数台の起動と起動完了待ち $ start-emulators # 複数台のスクリーンロック解除

    $ unlock-emulators # 複数台の停止 $ stop-emulators
  38. 4QPPO࣮ߦ # circle.yml test: override: 〜略〜 - ./gradlew spoon ͜ΕͰແࣄ$JSDMF$*؀ڥͰςετ͕௨Γ·ͨ͠

  39. $JSDMF$*্ͰϨϙʔτӾཡ օͰڞ༗Ͱ͖ΔɹˍɹϨϙʔτ͕ͣͬͱ࢒Δ

  40. ֨ಆ  $JSDMF$*Ͱෳ਺࣮ߦ $JSDMF$*ͷੑೳ଍ΓΔʁ

  41. ઃఆ͸ෳ਺෼૿΍͚ͩ͢ # circle.yml 〜 略 〜 test: pre: - echo n

    | android create avd --force --name circleci-android-21 --target android-21 -s WXGA800 - echo n | android create avd --force --name circleci-android-19 --target android-19 -s WXGA800 - emulator -avd circleci-android-21 -no-skin -no-audio -no-window: background: true parallel: true - emulator -avd circleci-android-19 -no-skin -no-audio -no-window: background: true parallel: true - ./start-emulators override: - ./unlock-emulators - ./gradlew spoon –PdisablePreDex post: - ./stop-emulators 〜 略 〜 ˡࣗ࡞ͷΞϨ ˡࣗ࡞ͷΞϨ ˡࣗ࡞ͷΞϨ ˢ̎୆໨ىಈ ˢ̍୆໨ىಈ ˢ̎୆໨࡞੒ ˢ̍୆໨࡞੒
  42. ཧ༝ •  ϝϞϦ଍Γͳ͍ͱڧ੍తʹམͪΔ ࣮ͦͯ͠ߦͯ͠ΈΔͱɾɾɾ   ςετམͪΔ

  43. 1SF%FYJOHΛແޮԽ 設定はWEBで http://tools.android.com/tech-docs/new-build-system/tips#TOC-Improving-Build-Server- performance ϝϞϦઃఆมߋ machine: environment: JAVA_OPTS: "-Xms256m -Xmx512m”

    ىಈ୆਺ݮΒ͢ ˠ̎୆͕ݶքͳײ͡ʢίϯςφ૿΍͢ͱ͍͚Δ͔΋ʁʣ
  44. ௕͍ઓ͍ʹউར(๑•̀ŷ•́)و✧

  45. ·ͱΊ •  ΞϓϦͷ6*ςετ͸ϋϚΓͲ͜Ζຬࡌ •  ΤϛϡϨʔλʔͷίϚϯυૢ࡞ͱ஥ྑ͘ͳΓ·͠ΐ͏ •  ͦ͜Λ৐Γӽ͑Δͱ޾͕ͤ଴͍ͬͯΔ •  ΞϓϦͷόʔδϣϯຖ֬ೝΛਓखͰ΍Βͳͯ͘ࡁΉ • 

    ࣮ػΛෳ਺ܨ͛Ε͹ػछґଘͷ֬ೝ΋Ͱ͖Δ •  6*ςετ͸30*Λߟ࣮͑ͭͭ૷͠Α͏ •  ,1*ʹؔ܎ͦ͠͏ͳओཁಋઢʹߜͬͯಋೖ͢Δͷ͕͓͢͢Ί