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

Web-E2E-Testing-from-Ruby

 Web-E2E-Testing-from-Ruby

MOROHASHI Kyosuke

December 05, 2017
Tweet

More Decks by MOROHASHI Kyosuke

Other Decks in Programming

Transcript

  1. Ruby && Webํ໘͔Βݟ͑ͨ

    ΤϯυπʔΤϯυςετͷ

    ྺ࢙ͱࢥ͍ग़
    ॾڮګհ @moro

    View Slide

  2. ‣ (ࣸਅ)
    ղফͰ͖ͨෆ҆

    View Slide


  3. Kyosuke MOROHASHI
    moro moro

    View Slide

  4. View Slide

  5. લ࢙

    View Slide

  6. ‣ ΞϓϦέʔγϣϯͷ਽ܗΛ࡞Δͱςετ؀ڥ͕͍ͭͯ͘Δɻ
    ‣ test/models, test/controllers, test/views …
    ‣ ʮ୯ମʯςετ͕த৺
    Ruby on Rails

    View Slide

  7. ‣ & rspec_rails
    ‣ spec/models, spec/controllers, ….
    RSpec

    View Slide

  8. ‣ ϞσϧɾϏϡʔɾίϯτϩʔϥΛ౷߹(integrate)ͯ͠

    ςετ͢Δɻ
    ‣ ୯ҰϦΫΤετʹ͓͍ͯɺΞϓϦέʔγϣϯͷ֤ϨΠϠ͕
    ҙਤ௨Γ౷߹ͯ͠ಈ͔͘ɺΛςετ͢Δɻ
    ‣ ෳ਺ϦΫΤετʹΘͨΔڍಈ(͋ͷը໘͔Β͜ͷը໘ʹભҠͯͦ͠ΕΛೖྗ…)
    ͸
    ςετͰ͖ͳ͍ɻ
    Integration test / Request spec

    View Slide

  9. ‣ ϒϥ΢βૢ࡞ΛࣗಈԽͯ͠ςετ͢Δ Selenium ͱɺ
    ‣ ਓؒͷૢ࡞Λه࿥ͯ͠ςετέʔεΛ࡞ͬͯ͘ΕΔ
    Selenium IDE
    Selenium & Selenium IDE

    View Slide

  10. ‣ ϓϩδΣΫτϝϯόʔ͕ɺຖே࠷৽ͷίʔυΛνΣοΫΞ
    ΢τͯ͠Ұ௨Γ৮ͬͯΈΔɻԿ͔͋Ε͹͙͢ʹ௚͢ɻ
    खಈͰͷܧଓతE2Eςετ

    View Slide

  11. ෳ਺ϦΫΤετʹ·͕ͨΔɺϢʔβʔ͕࣮ࡍʹ࢖͏

    γφϦΦʹԊͬͨςετ͸Αͦ͞͏ɻ
    ͜ͷ࣌఺Ͱ͸·ͩखಈςετɺ࣮ߦ͢Δͷ͕େมɻ
    Selenium IDEͰه࿥ͨ͠ςετ͸͙͢յΕΔɻ
    ࣮ײͰ͖ͨ͜ͱ

    View Slide

  12. Webrat +
    Cucumber

    View Slide

  13. ‣ ΤϯυπʔΤϯυςετΛɺࣗવݴޠͰ͔͚Δɻ
    ‣ MVCϨΠϠ௨؏ & ෳ਺ΞΫγϣϯ
    ‣ ࣗવݴޠͰςετ͕͔͚Δɻ
    ‣ Gherkin ϑΥʔϚοτ
    ‣ Given, When, Then / લఏɺ΋͠ɺͳΒ͹
    Cucumber

    View Slide

  14. ‣ Cucumber ͷόοΫΤϯυɺWebΞϓϦΛςετ͢Δͨ
    ΊͷϥΠϒϥϦɻ
    ‣ ηογϣϯ(cookie)ΛҾ͖ͭ͛Δ
    ‣ ʮෳ਺ϦΫΤετΛॱ൪ʹݺΜͩʯςετ͕͔͚ΔΑ͏ʹ
    ‣ ϦϯΫ΍ϑΥʔϜΛૢ࡞͢Δ(ͭ΋ΓͰ࢖͑Δ)API͕͋ͬͨ
    Webrat

    View Slide

  15. ‣ ࣗવݴޠͰॻ͍ͨ *.feature Λಈ͔ͨ͢Ίͷ࢓૊ΈΛ
    step_definitions ͱͯ͠ॻ͘ɻ
    ‣ step_definitions ͷத͸Rubyίʔυɻࣗવݴޠͱ͸

    ਖ਼نදݱͰϚονϯά͞ΕΔɻ
    Cucumber + Webrat

    View Slide

  16. View Slide

  17. ‣ Gherkin ςΩετΛϓϩάϥϚͱɺϓϩάϥϚͰ͸ͳ͍ਓ
    ͱɺڞ༗Ͱ͖ͳ͍͔ͨΊͨ͠ɻ
    ‣ ϏδωεαΠυ΁ͷ࢓༷ݕ౼/߹ҙʹ
    ‣ ݟੵ΋Γ୯Ґʹ࢖ͬͯΈͨΓ΋
    ‣ νʔϜͷ৽ϝϯόʔ΁ͷઆ໌ʹ
    ‣ ։ൃ࣌ͷҙࣝ߹Θͤʹ (feature͚ͩॻ͍ͨੜࣽ͑PRΛϨϏϡʔͨ͠Γ)
    ࢲͱCucumber

    View Slide

  18. Web ͷɺγφϦΦهड़Ͱ͖ΔE2Eࣗಈςετͷ࢓૊Έ͸
    ΍͸Γͪΐ͏΂ΜΓɻ
    ฼ޠͰॻ͍ͯ͋Δͷ΋ɺ΍ͬͯΈΔͱΘ͔Γ΍͍͢ɻ
    ૿͑ͨ૚͕ʮ೔ຊޠϓϩάϥϛϯάʯʹͳͬͯ͠·͏ͱ

    ϓϩάϥϚʹͱͬͯ͸൥ࡶͳ͚ͩɻ
    ࣮ײͰ͖ͨ͜ͱ

    View Slide


  19. ࣮ࡍʹ͸ɺͦΕΒ͸ඇٕज़ܥͷεςʔΫϗϧμʔ

    ʢར֐ؔ܎ऀʣͱҰॹʹςετΛॻ͘ͱ͍͏ɺ

    Սۭͷ৔ॴͰ͔͠໾ʹཱͪ·ͤΜɻ
    https://martinfowler.com/bliki/DynamicTyping.html 

    ( http://bliki-ja.github.io/DynamicTyping/ )

    View Slide



  20. View Slide

  21. ‣ ඞͣ͠΋ʮॻ͍ͯʯ΋ΒΘͳ͚Ε͹ͳΒͳ͍Θ͚Ͱ͸ͳ͍ɻ
    ‣ ಉ͡දݱͰεςʔΫϗϧμʔ͕Έͳڞ௨ཧղ͢Δͷ͕େࣄɻ
    ‣ ʮεςʔΫϗϧμʔʯʹ͸΋ͪΖΜɺ։ൃνʔϜ΋ؚ·ΕΔɻ
    ‣ ͦͷͨΊͷݴޠ΍ޠኮΛҭͯΔͷ͕େ੾ͩͬͨɻ
    Α͘ݴΘΕ·͢ɺɺɺ͚ͩͲ

    View Slide

  22. Capybara

    View Slide

  23. ‣ Webratޓ׵APIͷ͋ΔɺͳϥΠϒϥϦ
    ‣ υϥΠόΛ੾Γସ͑ͯJavaScript΋ಈ͔ͤΔΑ͏ʹɻ
    ‣ Selenium΋ߴϨϕϧAPIͰ࢖͑ΔΑ͏ʹͳͬͨɻ
    Capybara௒ϕϯϦɺͰ͢ΑͶ

    View Slide

  24. JavaScript ·ͰؚΉΤϯυπʔΤϯυςετ͸

    ΋͏΋ͷ͍͢͝خ͍͠ɻ
    Capybara APIࣗମ΋ͲΜͲΜศརʹͳ͍ͬͯΔɻ
    JS͕ಈ͘֎෦ϒϥ΢βΛىಈ͢Δͷ͸ɺศར͚ͩͲ஗͍&
    Τϥʔ͕Θ͔ΓͮΒ͘ͳͬͨɻ
    ࣮ײͰ͖ͨ͜ͱ

    View Slide

  25. ‣ RailsϒʔϜͱͱ΋ʹਓؾ্ঢɺߴػೳԽ͕ਐΉɻ
    ‣ shared example, subject, let, ϞοΫඪ४ఏڙ

    ‣ RSpec 3ͰAPIͱ(งғؾ)͕มΘΔɻ
    ‣ test-unit ΍ power-assert ͷ੒ख़ͱͱ΋ʹɺxunit଒ͷ
    ݟ௚͕͠ਐΉɻ
    ಉ࣌ظʹ(ྑ͘΋ѱ͘΋)RSpecʹ΋େ͖ͳมԽ͕

    View Slide

  26. Capybara + X
    season 1

    View Slide

  27. ‣ Turnip
    ‣ RSpecͷϥϯλΠϜͰɺGherkinελΠϧͷςετΛ

    ࣮ߦͰ͖Δɻ
    ‣ Cukeͷ൥ࡶϙΠϯτͩͬͨɺstep definitionsఆٛͱͷ

    ϚονϯάΛվળ͍ͯ͠Δɻ
    + RSpec + Gherkin

    View Slide

  28. ‣ feature spec
    ‣ Capybara APIΛ௚઀࢖ͬͯɺΤϯυπʔΤϯυςετΛ
    ॻ͚ΔΑ͏ʹͨ͠ɻ
    ‣ Ұ෦ͷޠኮ(feature, scenario…)Λಋೖ͕ͨ͠ɺ͋͘·
    ͰRSpecͷϝιου໊ΤΠϦΞεʹͱͲ·Δɻ
    ‣ 2017೥࣌఺ͩͱɺ͜Ε͕ଟ਺೿͔ͳɻ
    + RSpec - Gherkin

    View Slide

  29. ‣ σʔλͷηοτΞοϓ͕ͭΒ͍ɻ
    ‣ Τϯυ͔ΒผͷΤϯυ·Ͱɺ௕େͳΦϒδΣΫτάϥϑ͕ඞཁͱͳΓ͕ͪɻ
    ‣ ͕͔͔࣌ؒͬͨΓɺҙਤͤ͵ෆ׬શσʔλ͕Ͱ͖ͨΓɻ
    ‣ ૊Έ߹Θͤͷςετ͕ͭΒ͍ɻ
    ‣ shared exampleΛۦ࢖ͨ݁͠Ռɺݟ௨͕͠ѱ݅͘਺΋ଟ͘ͳΔɻ
    feature spec ͭΒ͍ܥ ͋Δ͋Δ

    View Slide

  30. JavaScript ·ͰؚΉΤϯυπʔΤϯυςετ͸

    ΋͏΋ͷ͍͢͝خ͍͠ (΄Μ͜Ε)
    Α͍ΤϯυπʔΤϯυςετΛॻ͘ͷ͸೉͍͠ɻ
    υϝΠϯʹԊͬͨޠኮΛҭͯΔͷ΋ɻ
    ݕূ͢΂͖݁ՌͷݟۃΊ(ͳΜͱͳ͘Ξαʔτ)΋ɻ
    ࣮ײͰ͖ͨ͜ͱ

    View Slide


  31. https://speakerdeck.com/akiinyo/du-miyasuiendotuendotesutogashu-kitai?slide=5

    View Slide

  32. શϨΠϠΛ·ͱΊςετ͢Δʹ͸ศར
    ͚ͩͲɺେ͖ͯ͘஗͍ςετʹͳΓ͕ͪ
    ݁Ռͱͯ͠:

    View Slide

  33. Capybara + X
    season 2

    View Slide

  34. ‣ Appium
    ‣ Web͚ͩͰ͸ͳ͘ϞόΠϧΞϓϦ΋ࣗಈςετՄೳʹɻ
    ‣ Rails 5.1+ ͰCapybara͕ඪ४ʹɻ
    ‣ SystemTestCaseͱͯ͠࢖͑ΔΑ͏ʹͳΓɺRSpecͰ΋
    System Specͱͯ͠αϙʔτɻ
    ‣ Selenium υϥΠόͰheadless chrome΋࢖͑ΔΑ͏ʹɻ
    ͜Ε͔ΒͷΤϯυπʔΤϯυςετ

    View Slide

  35. ·ͱΊ

    View Slide

  36. ‣ ࣗಈԽ͞Εͨ
    ‣ ΤϯυπʔΤϯυͷςετ͸
    ‣ ͱͯ΋Α͍΋ͷͩ
    ࣮ײͰ͖ͨՁ஋

    View Slide

  37. ‣ ΤϯυπʔΤϯυςετ͸
    ‣ େ͖ͯ͘
    ‣ ஗ͯ͘
    ‣ ॻ͘/ϝϯς͢Δͷ͕ΊΜͲ͍͘͞ɺςετʹͳΓ͕ͪ
    ࢒ͬͨ՝୊

    View Slide


  38. ࣗಈςετΛॻ͘ϓϥΫςΟε͸ੈͷ
    தʹཱ೿ʹࠜ෇͖ɺࣗ෼ͨͪͰࣗಈς
    ετΛॻ͘ͷ͕ʮ;ͭ͏ʯͳੈͷதʹ
    ͳΓ·ͨ͠ɻ͜Ε͸େ͖ͳલਐͰ͢ɻ
    — テスト駆動開発 「付録C」

    View Slide

  39. ‣ ໨ͷલͷϑΟʔνϟΛͲ͏͍͏γφϦΦʹͰ͖Δ͔ɺ

    ͦͷγφϦΦͰͷςετର৅͸Կ͔ɺΛΑ͘ߟ͑Δɻ
    ‣ ύϥϝλϥΠζυςετ(γφϦΦΞ΢τϥΠϯ)͸ɺ

    ΋͏ͪΐͬͱٕज़తʹ͏·͘΍Εͦ͏ͳؾ΋͢Δɻ
    ‣ υϝΠϯ΍νʔϜʹ߹ͬͨޠኮΛҭ͍ͯͯ͘ɻ
    ࢒ͬͨ՝୊ͱ޲͖߹͑Δͱ͍͍Ͱ͢ΑͶ

    View Slide


  40. ςετۦಈ։ൃ͸ɺϓϩάϥϛϯάதͷෆ҆Λ
    ίϯτϩʔϧ͢Δख๏ͩɻ ུ

    ʮ͜Ε͸ࠔ೉ͳ໰୊ͳͷͰɺ࠷ॳ͔Β͢΂ͯΛ
    ݟ௨ͤΔΘ͚Ͱ͸ͳ͍ʯͱ͍͏ਅͬ౰ͳײ֮ͷ
    ͜ͱͩɻ
    — テスト駆動開発 「まえがき」

    View Slide

  41. ‣ ʮϑΟʔνϟશମʯ͸΋ͪΖΜ࠷ॳ͔Βݟ౉ͤͳ͍ɻ
    ‣ Ͱ΋ϑΟʔνϟͷࠜຊΛͪͬͪΌ͘࡞ͬͯɺͦͷςετΛ
    ௨͠ଓ͚Δ͜ͱ͸Ͱ͖ͦ͏ɻ
    ‣ ࠜຊ͸Կ͔ɺ͸ߟ͑Δɻ
    ‣ νʔϜͷޠኮ͕ҭ͍ͬͯΕ͹ɺ͍ͬͦ͏εϜʔζʹͳΓͦ͏ɻ
    ʮΤϯυπʔΤϯυʯ΁ͷద༻

    View Slide