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

アジャイル開発とE2Eテストの話

 アジャイル開発とE2Eテストの話

SHIFT_EVOLVE

July 01, 2021
Tweet

More Decks by SHIFT_EVOLVE

Other Decks in Business

Transcript

  1. ΞδϟΠϧ։ൃͱ
    E2Eςετͷ࿩
    2021/06/25
    DevOps & QAΤϯδχΞLTେձ Vol.1
    Yyoshitomi

    View Slide

  2. ࣗݾ঺հ
    • גࣜձࣾτϦΫτϥοΫ
    • QA୲౰
    • ৽ଔࡾ೥໨
    • ٢෌ඦ߹ࡊ

    View Slide

  3. ฐࣾͷ։ൃମ੍
    • ΞδϟΠϧ։ൃΛ࠾༻
    • εϓϦϯτ͸2िؒ͝ͱ
    • CircleCIͳͲͷܧଓతσϓϩΠ
    • ຖ೔3ճͷE2Eςετͷఆظ࣮ߦ

    View Slide

  4. • ෼ࢄ୆ாʢϒϩοΫνΣʔϯʣܕαʔϏε
    • औҾࢀՃاۀɹ1ࣾ͝ͱʹ1ϊʔυʢαʔόʔʣཱ͕ͭ
    • औҾ͝ͱʹೝఆೝূہͷλΠϜελϯϓΛԡ͢
    • ϑϨʔϜϫʔΫɿCordaɺSpringɺRails
    • ϑϩϯτΤϯυɿReact
    ݱϓϩδΣΫτʹ͍ͭͯ

    View Slide

  5. ςελʔ͔ΒݟͨݱϓϩδΣΫτͷݫ͍͠఺
    • औҾʹؔ܎͢Δૢ࡞͕·ͣ஗͍
    • ຖिಥવػೳ௥Ճ͕ੜ͑ͯ͘Δ
    • ը໘΍ϝʔϧͷจݴ͕ߴස౓ͰมΘΔ
    • UI΋ߴස౓Ͱมߋ͕ೖΔͷͰɺSPAͷߏ੒΋ෳࡶ
    • ॏ͍
    ͱʹ͔͘ςετ͕௥͍͔ͭͳ͍

    View Slide

  6. E2EςετΛؤுΖ͏ͱࢥͬͨ
    • ܾ·ͬͨखॱͰςετͰ͖Δ
    • จݴͷมߋͷͨͼʹςετ͕མͪΔ͔Βݟམͱ͕͠ൃੜ͠ͳ͍
    • ςελʔҎ֎ͷࢹ఺Ͱ΋ςετͰ͖Δ

    View Slide

  7. ͜͏ͨ͠໰୊Λ
    ղফͰ͖Δʂ
    ୯ମςετ΍Request specͰ΋Χόʔ
    Ͱ͖ͳ͍෦෼Λܾ·ͬͨखॱͰςετͰ͖Δ
    • ޡೖྗͳͲɺखಈͩͱੜ͡Δೖྗ಺༰΍ૢ࡞ͷ͹Β͖͕ͭൃੜ͠ͳ͍
    • ΍΍͍͜͠ૢ࡞Λ໢ཏతʹ࣮ߦͰ͖Δ
    ೖྗཝʹʮ༗೉͏ʯͬͯ
    ೖྗ͢Δͭ΋Γ͕
    ʮٜ஍ࠈʯͬͯೖྗͯ͠
    ͠·ͬͨʂ
    ΋͏͔Ε͜Ε4ճ͘Β͍
    ҧ͏ϘλϯΛΫϦοΫͯ͠
    ςετ΍Γ௚ͯ͠Δʂ

    View Slide

  8. ςετΛ
    ϝϯςφϯε͠ͳ͕Β
    ϦϑΝΫλϦϯά΋
    Ͱ͖Δʂ
    จݴͷมߋͷͨͼʹςετ͕མͪΔ͔Β
    ݟམͱ͕͠ൃੜ͠ͳ͍
    • 1ͭͷ༻ޠ͕มߋʹͳΔͱը໘શମͷจݴ͕มߋʹͳΔ͜ͱ΋͠͹͠
    ͹͕ͩɺe2eͳΒࣗಈతʹը໘্ͷจݴΛ֬ೝͯ͘͠ΕΔ
    ͜͜͸Α͘จݴ͕
    มΘΔ͔Βe2eͰ
    ֬ೝ͠Α͏ʂ

    View Slide

  9. ςελʔҎ֎ͷࢹ఺Ͱ΋ςετͰ͖Δ
    • ςετγφϦΦΛQAҎ֎ͷϓϩάϥϚʹϨϏϡʔͯ͠΋Β͑ΔͷͰ
    ςελʔҎ֎ͷࢹ఺Ͱ΋ςετͰ͖Δ
    ͜ͷςετ͸
    ୯ମςετͰ੥͚ෛͬͯ
    ͜͜͸΋ͬͱ
    ςετέʔεΛ૿΍͠
    ·͠ΐ͏ʂ
    ͳΔ΄Ͳʂ

    View Slide

  10. E2Eςετͷߏ੒
    • Cucumber
    • Capybara
    • Selenium Chrome
    • CIͰͷςετ͸headlessϞʔυ
    • CircleCI

    View Slide

  11. • γφϦΦ
    • ࣗવݴޠͰॻ͚Δ
    • ೔ຊޠͰ લఏɾ΋͠ɾ͔ͭɾͳΒ͹
    • Step
    • rubyͰ࣮૷
    Cucumber

    View Slide

  12. ςετγφϦΦ γφϦΦ: Ϣʔβʔ͸ϝʔϧΞυϨεͱύεϫʔυ
    ͰγεςϜʹϩάΠϯͰ͖Δ
    લఏ ϩάΠϯը໘Λද͍ࣔͯ͠Δ
    ΋͠ ϝʔϧΞυϨεೖྗཝʹ"[email protected]"ͱೖྗ͢Δ
    ͔ͭ ύεϫʔυೖྗཝʹ"password"ͱೖྗ͢Δ
    ͔ͭ "ϩάΠϯ"ΛΫϦοΫ͢Δ
    ͳΒ͹ μογϡϘʔυΛද͍ࣔͯ͠Δ
    ͔ͭ ϔομʔࢯ໊ʹ"ࢁా Ֆࢠ"ͱදࣔ͞ΕΔ

    View Slide

  13. γφϦΦͷॻ͖ํ
    • ̍γφϦΦͰςετ͢Δ͜ͱ͸γϯϓϧʹ
    • ಉ͜͡ͱΛԿճ΋ςετ͠ͳ͍
    • എܠ΍લఏͳͲΛ͏·͔ͭ͘͏ ௕͍ͱ୭΋
    ಡΜͰ͘Εͳ͍ʂ

    View Slide

  14. γφϦΦͷ
    ॻ͖ํ
    γφϦΦΞ΢τϥΠϯ: ޡͬͨύεϫʔυ΍ϝʔϧΞυ
    ϨεͰ͸ϩάΠϯͰ͖ͳ͍
    લఏ ϩάΠϯը໘Λද͍ࣔͯ͠Δ
    ΋͠ ϝʔϧΞυϨεೖྗཝʹ""ͱೖྗ͢Δ
    ͔ͭ ύεϫʔυೖྗཝʹ""ͱೖྗ͢Δ
    ͔ͭ "ϩάΠϯ"ΛΫϦοΫ͢Δ
    ͳΒ͹ "ϝʔϧΞυϨε·ͨ͸ύεϫʔυʹޡΓ͕͋Γ·͢ɻ࠶౓͝ೖྗ
    ͍ͩ͘͞ɻ"ͱදࣔ͞ΕΔ
    ྫ:
    | ϝʔϧΞυϨε | ύεϫʔυ |
    | [email protected] | passpass |
    | [email protected] | password |
    • ExampleʢྫʣΛ͏·͔ͭ͘͏
    • ͨͩ͠ςʔϒϧ͕ڊେʹͳΓ
    ͗͢ͳ͍Α͏ʹ͢Δ
    • Scenario OutlineͰ΋ςετͨ͠
    ͍͜ͱ͸̍γφϦΦͰͻͱͭʹ
    ߜΔ

    View Slide

  15. γφϦΦͷ
    ॻ͖ํ
    γφϦΦΞ΢τϥΠϯ: Ϣʔβʔ͸ඞਢ߲໨Λೖྗͯ͠೔هͷ৽ن࡞੒͕Ͱ͖Δ
    લఏ Ϣʔβʔ͸”"ͰϩάΠϯ͍ͯ͠Δ
    ͔ͭ ೔هͷ࡞੒ը໘Λද͍ࣔͯ͠Δ
    ͔ͭ ໊݅ʹ""ͱೖྗ͢Δ
    ͔ͭ ຊจʹ""ͱೖྗ͢Δ
    ͔ͭ ը૾ʹ”"ΛΞοϓϩʔυ͢Δ
    ΋͠ "ৄࡉ߲໨ʢ೚ҙʣ"ͱදࣔ͞ΕΔ
    ͔ͭ ߦͬͨ৔ॴʹ””ͱೖྗ͢Δ
    ͔ͭ ࢖༻ֹۚʹ”"ͱೖྗ͢Δ
    ͔ͭ "࡞੒"ΛΫϦοΫ͢Δ
    ͔ͭ ""ͱදࣔ͞ΕΔ
    ͔ͭ ϝχϡʔ͔Β""ΛΫϦοΫ͢Δ
    ͳΒ͹ “”ʹ””ͱ”"
    ྫ:
    ɹ | Ϣʔβʔ | ໊݅ | ຊจ | ϑΝΠϧ | ৔ॴ | ֹۚ | ϝοηʔδ | ϖʔδ | දࣔ݁Ռ |
    | Ϣʔβʔ1 | ɹ| | | | | ೖྗͯ͠Լ͍͞ | μογϡϘʔυ | දࣔ͞Εͳ͍ |
    | Ϣʔβʔ1 | ɹ| | | | | ೖྗͯ͠Լ͍͞ | ೔هҰཡ | දࣔ͞Εͳ͍ |
    | Ϣʔβʔ1 | ͍͋͏ | | | | | ೖྗͯ͠Լ͍͞ | μογϡϘʔυ | දࣔ͞Εͳ͍ |
    | Ϣʔβʔ2 | ɹ| | | | | ೖྗͯ͠Լ͍͞ | μογϡϘʔυ | දࣔ͞Εͳ͍ |
    | Ϣʔβʔ2 | ɹ| | | | | ೖྗͯ͠Լ͍͞ | ೔هҰཡ | දࣔ͞Εͳ͍ |
    | Ϣʔβʔ1 | ͍͋͏ | ͔͖͘ | | | | ೖྗͯ͠Լ͍͞ | μογϡϘʔυ | දࣔ͞Εͳ͍ |
    | Ϣʔβʔ1 | ͍͋͏ | ͔͖͘ | test.png | | | ೔هΛ࡞੒͠·ͨ͠ | μογϡϘʔυ | දࣔ͞ΕΔ |
    | Ϣʔβʔ1 | ͍͋͏ | ͔͖͘ | test.png | | | ೔هΛ࡞੒͠·ͨ͠ | ೔هҰཡ | දࣔ͞ΕΔ |
    | Ϣʔβʔ1 | ͍͋͏ | ͔͖͘ | test.jpeg | | | ೔هΛ࡞੒͠·ͨ͠ | μογϡϘʔυ | දࣔ͞ΕΔ |
    | Ϣʔβʔ1 | ͍͋͏ | ͔͖͘ | test.jpeg | | | ೔هΛ࡞੒͠·ͨ͠ | ೔هҰཡ | දࣔ͞ΕΔ |
    • γφϦΦλΠτϧͱ಺༰͸߹͍ͬͯΔ͔ʁ
    • ಉ͡ૢ࡞Λϖϧιφͷ਺͚ͩ֬ೝ͢Δҙຯ͸͋
    Δͷ͔?
    • γφϦΦΞ΢τϥΠϯʹཔΓ͗ͯ͢҉߸ͷΑ͏
    ͳγφϦΦʹͳ͍ͬͯͳ͍͔?
    • ͦͷςετ͸ຖճࣗಈͰ࣮ߦ͢Δඞཁ͸͋Δͷ
    ͔?
    • ςετέʔεͷਫ਼ࠪΛͤͣɺطଘͷγφϦΦΛ
    ίϐϖͯ͠গ͠ม͚͑ͨͩʹͳ͍ͬͯͳ͍͔ʁ
    • ςετ͕ಈ͚͹ྑ͍ͱࢥ͍ͬͯͳ͍͔ʁ
    • ԿͷͨΊͷςετͳͷ͔ʁ

    View Slide

  16. Stepͷॻ͖ํ
    • ؾΛ͚ͭΔ͜ͱ
    • Ϋϥε΍XPath͸ͳΔ΂͘࢖Θͳ͍
    ὎ E2Eςετʹϝϯςφϯε͸͖ͭ΋ͷ͕ͩɺ
    ɹ ΫϥεͳͲ͸SPAͷมߋʹΑͬͯมΘͬͯ͠·͏͜ͱ΋͋ΔͷͰɺ
    ϝϯςφϯεස౓Λ཈͑ΔͨΊʹ΋࢖༻͢Δlocator͸ߟྀ͢Δ

    View Slide

  17. Stepͷॻ͖ํ
    • ςετ͍ͨ͠จݴ͸ϕλॻ͖͢Δ
    • i18nͳͲͰߏ଄Խ͠ͳ͍
    when ‘ OKϘλϯΛΫϦοΫ͢Δ’
    find(‘’).click
    end
    t(‘test_string’) ͳͲ͸ආ͚Δ

    View Slide

  18. Stepͷॻ͖ํ
    MPDBUPSͱςΩετΛࢦఆͯ͠จݴΛ౎౓֬ೝ͢Δ
    when ‘ OKϘλϯΛΫϦοΫ͢Δ’
    find(‘’, text: “OK”).click
    end

    View Slide

  19. Stepͷॻ͖ํ
    ςετͷ໨త͸
    ʮػೳ΍UI͕࢓༷௨Γʹͳ͍ͬͯΔ͜ͱΛ
    อূ͢ΔͨΊʯͰ͋Δ͜ͱΛ๨Εͳ͍Α͏ʹ͍ͨ͠
    ςετͷ໨త͕ʮϝϯςφϯεΛ͠ͳ͍Α͏ʹςετΛճ͢͜ͱʯʹ
    ͳͬͯ͠·͏ͱҙຯ͕ແ͍

    View Slide

  20. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide