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

AWS を使ったシステムのテスト方針 #jawsug #jawsug_niigataken #nds60

AWS を使ったシステムのテスト方針 #jawsug #jawsug_niigataken #nds60

第60回 長岡IT技術者勉強会資料

Kazumune Katagiri

June 22, 2019
Tweet

More Decks by Kazumune Katagiri

Other Decks in Technology

Transcript

  1. AWS Λ࢖ͬͨγεςϜͷςετํ਑
    (αʔόαΠυ)
    2019/6/22 @nemuzuka
    ୈ60ճ ௕ԬITٕज़ऀษڧձ

    View Slide

  2. ॳΊͯͷํ΋ͦ͏Ͱͳ͍ํ΋
    • ยۅ Ұफ (͔ͨ͗Γ ͔ͣΉͶ)
    • id: nemuzuka / @nemuzuka
    • Java / Scala / Kotlin(࠷ۙ࢝Ίͨ)
    • ݸਓࣄۀओ
    • 95 % ͘Β͍ϦϞʔτ(௕Ԭ)ͰϫʔΫ

    View Slide

  3. ࠓ೔ͷษڧձͰ
    AWS ࢖ͬͨγεςϜ։ൃ͍ͨ͠ʂ
    ͱࢥͬͨํ΋ଟ͍ͱࢥ͍·͢

    View Slide

  4. ͱ͸͍͑
    γεςϜ։ൃΛ͢Δ্Ͱ͸
    ςετ͸ආ͚ͯ௨Ε·ͤΜ

    View Slide

  5. Unit Test ͷஈ֊Ͱ
    ϩʔΧϧ͔Β AWS ࢖͍·͔͢ʁ
    (࣮֬Ͱ͚͢Ͳ Slow Test ʹͳΓ΍͍͢Ͱ͢ΑͶ)

    View Slide

  6. ࠓճͷ͓୊
    AWS Λ࢖ͬͨγεςϜͷ
    ςετํ਑

    View Slide

  7. ݴ༿ͷఆٛ
    • Unit Test (UT)
    • ର৅ͷΫϥε(ϝιου)ͷৼΔ෣͍ͷςετ
    • Integration Test (IT)
    • API ͷݺͼग़͠ͷৼΔ෣͍ͷςετ
    • System Test (ST)
    • ෳ਺ͷ API ͷݺͼग़͠΍ AWS ͷػೳΛ࢖ͬͯϢʔεέʔε͕
    ຬ͍ͨͤͯΔ͔ͷςετ

    View Slide

  8. ͋ΔγεςϜͷߏ੒
    ALB
    Fargate
    RDS
    SNS1
    SQS1
    SNS2
    subscribe
    ը໘ଆͷ௨஌༻
    Controller
    Service Repository
    EventPublisher
    MessagePolling
    Service
    EventPublisher
    Repository
    ఆظతʹ polling
    ExternalClient ֎෦αʔϏε

    View Slide

  9. ͊͞ɺςετ͍͖ͯ͠·͠ΐ͏ʂ

    View Slide

  10. Unit Test
    • ґଘ͢Δ class ͸ Mock Խ
    • e.g. Controller ͷςετͰ͸ Service ͸ Mock Խ͢Δ
    • Mock ࢖ͬͨՕॴ͸ݺΜͩ͜ͱ + Ҿ਺ͷ assert Λߦ͏
    • Repository ࣮૷ͷςετ͸ H2 ౳࢖ͬͯɺSQL ͷςετΛߦ͏
    • AWS / ֎෦αʔϏεΛҙࣝ͢ΔՕॴ͸ແཧʹςετ͠ͳ͍
    • AWS ͷ SDK Λ࢖͏ՕॴΛہॴԽ͢Δ
    • EventPublisher / MessagePolling
    • Mock αʔόతͳ΋ͷΛཱͯͯ΋͍͍͚Ͳɺ࣮ػͰ֬ೝͨ͠ํ͕࣮֬
    • AWS / ֎෦αʔϏεΛҙࣝ͢Δͷ͸ class ͷ࣮૷ଆ
    • ݺͼग़͠ݩ͸ interface ͚ͩ஌͍ͬͯΕ͹ྑ͍
    • ֎෦αʔϏε͕ Test ϞʔυͰςετͰ͖ΔͳΒ΍ͬͨํ͕ྑ͍
    Controller
    Service Repository
    EventPublisher
    MessagePolling
    ExternalClient
    ɹɹɹ : ςετΫϥεΛ࡞Δ୯Ґ
    DomainModel
    ValueObject

    View Slide

  11. Integration Test
    • جຊతʹ͸࣮ࡍͷ object Λ࢖͏
    • Repository ͸ H2 ͱ͔࢖͏
    • ςετέʔεͷதͰ table ͷ assert ΋ߦ͏
    • AWS / ֎෦αʔϏεΛҙࣝ͢ΔՕॴ͸ Mock Խ
    • ֎෦αʔϏε͕ Test ϞʔυͰςετͰ͖ΔͳΒ࣮ࡍ
    ͷ object Λ࢖ͬͯ௨৴ͯ͠΋ྑ͍
    • γφϦΦͬΆ͘ API Λ૊Έ߹ΘͤͨςετέʔεΛ࡞ͬ
    ͯ΋ྑ͍
    • Controller ݺͼग़͠ -> (SQS ͔ΒͷϝοηʔδΛऔͬ
    ͖ͯͨςΠͰ) Service ݺͼग़͠
    Controller
    Service Repository
    EventPublisher
    MessagePolling
    Service
    EventPublisher
    Repository
    ExternalClient
    ɹɹɹ : ςετΫϥεΛ࡞Δ୯Ґ
    : ςετΫϥεͷ։࢝Ґஔ

    View Slide

  12. System Test
    • AWS ্ʹຊ൪ͱಉ͡
    ߏ੒ͷ ST ؀ڥΛ࡞Δ
    • ST ؀ڥʹ Docker
    Image ΛσϓϩΠ
    • ST ؀ڥͷ API Λςε
    τΫϥε͔Βݺͼग़͢
    ALB
    Fargate
    RDS
    SNS1
    SQS1
    SNS2
    ֎෦αʔϏε

    View Slide

  13. ςετίʔυͷ؅ཧͱ࣮ߦλΠϛϯά
    • ςετίʔυ͸ϓϩμΫγϣϯίʔυ
    ͱҰॹͷϦϙδτϦͰ؅ཧ
    • feature branch Λ push ͨ࣌͠ʹ
    CircleCI ্Ͱςετ࣮ࢪ
    • merge ৚݅͸ϨϏϡʔͱ CircleCI
    ͷςετʹ pass ͢Δ͜ͱ
    • ςετʹ pass ͢Δͱ Docker
    Image ͕Ͱ͖Δ
    • System Test ༻ͷγφϦΦΛ؅ཧ͢
    ΔϦϙδτϦΛ༻ҙ
    • Test Ϋϥε͚ͩͷϦϙδτϦ
    • System Test ؀ڥʹ Docker Image
    ΛσϓϩΠͯ͠ɺTest ࣮ߦ(CircleCI)
    • ຖ೔ఆظతʹ System Test Λ࣮ߦ
    ͠ɺςετ͕௨Δ͔Λ֬ೝ͢Δ
    Unit Test / Integration Test System Test

    View Slide

  14. ςετ͸όονϦʂ
    ʴ
    ۚͰ(Ϧιʔε૿ڧͯ͠)໰୊͸
    શͯղܾͰ͖Δ
    ͱ͍͏༁Ͱ΋ͳ͍ͷͰɺ
    ࢖͏αʔϏεͷΫη΋ߟ͓͖͑ͯ·͠ΐ͏

    View Slide

  15. SQS
    • ෳ਺ճϝοηʔδ͕औΕΔ͜ͱ͕͋Δ / ॱং͕อূ͞Εͳ͍
    • FIFO ΋͋Δ͚Ͳεϧʔϓοτ͕…
    • ॏෳΛආ͚ΔͷͰ͸ͳ͘ɺෳ਺ճϝοηʔδ͕औΕͯ΋େৎ෉
    ͳΑ͏ʹઃܭ͢Δ
    • e.g. ॲཧΛߦ͏લఏ৚݅Λຬͨ͞ͳ͍৔߹ɺࣺͯΔ
    • e.g. ॲཧதͷεςʔλεͷ৔߹ɺϦΫΤετΛड͚෇͚ͳ
    ͍

    View Slide

  16. RDS(ͱ͍͏͔ MySQL)
    • ద੾ʹ index షΖ͏
    • Πϯελϯε͋͛ͯ΋ SSD Ͱ΋݅਺૿͑Δͱμϝͳ࣌͸μϝ
    • τϥϯβΫγϣϯ෼཭Ϩϕϧҙࣝ͠Α͏
    • MySQL ͷ REPEATABLE READ Ͱߋ৽ॲཧͷεϧʔϓοτग़ͤΔͷ…͔ʁ
    • Oracle ͬΆ͘ MySQL ࢖͏ͱେମϠέυ͢Δ
    ಡΜͩ࣌ؒ͸ଛ͠ͳ͍ˠ

    View Slide

  17. SQS + RDS
    • SQS ͷ enqueue ͱ dequeue + ॲཧͷλΠϛ
    ϯάʹؾΛ͚ͭͯ
    • RDS ͷ commit લʹ enqueue ͯ͠͠·
    ͍ɺ dequeue ͨ͠ଆͷॲཧͰର৅ͷϨίʔ
    υ͕ͳ͍…ͱ͍͏͜ͱʹͳΒͳ͍Α͏ʹ

    View Slide

  18. ·ͱΊ
    • ςετ͸େࣄ͚ͩͲؤுΓ͗͢ͳ͍
    • ݕূίʔυͱςετ͸ผɻUT / IT ͰԿͰ΋΍Ζ͏ͱ͠ͳ͍ํ͕ྑ͍
    • ੹຿Λ෼͚Ε͹ UT ΋͠΍͘͢ͳΔɻDI ࢖͑Δํ͕ςετ͠΍͍͢(assert ͕࢓ࠐΈ΍͍͢)
    • JVM ࢖͏ͳΒ SpringBoot + Kotlin ͕ࠓͷॴݸਓతʹੜ࢈ੑߴ͍ؾ͕͢Δ
    • AWS ࢖͏ͱָʹͳΔͱ͜Ζ͸ੵۃతʹ࢖͍͖ͬͯ·͠ΐ͏ʂ
    • ஌ͬͯΕ͹େৎ෉ͳ͜ͱ͕ଟ͍Ͱ͢ɻͨͩɺ؂ࢹͱܭଌ͸ॏཁ
    • ࣄલʹෛՙςετ͓ͯ͘͠ͱۚͰղܾͰ͖ͳ͍͜ͱʹؾ෇͖΍͍͢Ͱ͢
    • όʔδϣϯͷԘ௮͚͸Ͱ͖ͳ͍ͷͰɺςετ͕ແ͍ͱόʔδϣϯ UP ͕͠ΜͲ͍Ͱ͢
    • UI ଆ(εϚϑΥΞϓϦ / ϒϥ΢β)ͷࠓ࣌ͷςετͬͯͲ͏΍ͬͯΔͷ͔ඇৗʹؾʹͳΓ·͢ʂ

    View Slide