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

タップル モバイルアプリにE2Eテストが導入されるまでの軌跡

タップル モバイルアプリにE2Eテストが導入されるまでの軌跡

サービスでアジリティ面,コスト面共にボトルネックになるのがリグレッションテストです。タップルでは週次リリースのため,毎週何人ものテスターの方が1日以上かけてテストしています。この作業を自動効率化するのがAutifyをはじめとするE2Eテストツールです。しかし導入までには実際には多くの障壁があります。このセッションではタップルでE2Eテストが運用に導入されるまでの軌跡や,運用に乗せるまでに乗り越えなくてはならないハードルについてお話しします。

CyberAgent

July 08, 2022
Tweet

More Decks by CyberAgent

Other Decks in Technology

Transcript

  1. E2E(End to End) Testͱ͸ ࢀߟจݙɿhttps://autify.com/ja/news/for-mobile-launch •ΞϓϦέʔγϣϯΛશͯ݁߹ͨ͠ঢ়ଶͰɺϨΠϠʔͷ ॳΊ͔ΒऴΘΓ·ͰʢEnd to Endʣςετ͢Δ͜ͱ •Autify,

    MagicPodͱ͍ͬͨςετࣗಈԽSaaS͕ొ৔ •खಈͰςετέʔεΛ֬ೝ͢Δ͜ͱΛE2Eςετͱݺ Ϳ͜ͱ΋͋Δ͕ɺʮϚχϡΞϧςετʯͱͯ۠͠ผ͠ ·͢
  2. ਪ঑Ͱ͖ΔϢʔεέʔε ϚχϡΞϧςετ͔ΒE2EςετʹҠߦ͢ΔϢʔεέʔε •ϦϦʔεස౓Λ͍͋͛ͨ
 ྫʣαʔόʔͷΦϯσϚϯυϦϦʔεΛ࣮ݱ͢Δ
 → Өڹͷগͳ͍ϦϦʔε͸ϝΠϯػೳʹߜΓE2Eςετ → มߋ͕গͳ͘޻਺͕͔͔ΔςετΛࣗಈԽ → ಛఆͷέʔεͷΈΛࣗಈԽ

    •ϚχϡΞϧςετͷ޻਺ΛҰఆ·ͰԼ͍͛ͨ
 ྫʣςελʔνʔϜͷਓһͷ্ݶ •ಛघͳঢ়گͰൃੜ͢Δෆ۩߹͕ى͖ͯͳ͍͜ͱΛ୲อ
 ྫʣOpenAPI GeneratorͷόʔδϣϯʹͣΕ͕ͳ͍͔
  3. UI Test Linter E2E Test ཧ૝ͷόάݕ஌ Syntax Highlight Static type

    check ༧໿ޠλΠϙ ม਺໊λΠϙ ܕม׵ϛε ෼ذߟྀ࿙Ε ը໘ભҠϛε APIͷύʔεΤϥʔ Unit Test / Integration Test ࢀߟจݙɿhttps://speakerdeck.com/orgachem/ios-apurierajian-shi-falseshe-ji-tosofalsexiao-guo
  4. UI Test Linter E2E Test ཧ૝ͷόάݕ஌ Syntax Highlight Static type

    check ༧໿ޠλΠϙ ม਺໊λΠϙ ܕม׵ϛε ෼ذߟྀ࿙Ε ը໘ભҠϛε APIͷύʔεΤϥʔ Unit Test / Integration Test ࢀߟจݙɿhttps://speakerdeck.com/orgachem/ios-apurierajian-shi-falseshe-ji-tosofalsexiao-guo όάͷൃݟ͕஗Ε ੜ࢈ੑ͕Լ͕͍ͬͯ͘
  5. UI Test Linter E2E Test ཧ૝ͷόάݕ஌ Syntax Highlight Static type

    check ༧໿ޠλΠϙ ม਺໊λΠϙ ܕม׵ϛε ෼ذߟྀ࿙Ε ը໘ભҠϛε APIͷύʔεΤϥʔ Unit Test / Integration Test ࢀߟจݙɿhttps://speakerdeck.com/orgachem/ios-apurierajian-shi-falseshe-ji-tosofalsexiao-guo E2EςετͰ୲อ͢΂͖ 
 ͸ΞϓϦʹด͡ͳ͍ڍಈ
  6. ϝΠϯϧʔϓγφϦΦ αʔόʔͷΈͷϢʔβʔӨڹͷͳ͍૝ఆͷϦϦʔε࣌ʹϝΠ ϯͷػೳͷಈ࡞୲อ͕Ͱ͖Δঢ়ଶ 1. ঁੑͰͷ৽نొ࿥ 2. ᶃͰొ࿥ͨ͠ঁੑͰ͍͍͔΋ɺ͍·͍ͪ 3. ᶃͰొ࿥ͨ͠ঁੑͰλϒόʔͷ֤λϒͷදࣔ 4.

    ᶃͰొ࿥ͨ͠ঁੑͰஉੑ1ʹ͍͍͔΋ 5. உੑ1ͰᶃͰొ࿥ͨ͠ঁੑͱϚον͠ɺϝοηʔδૹ৴ 6. ᶃͰొ࿥ͨ͠ঁੑͰϝοηʔδͷฦ৴ 7. ᶃͰొ࿥ͨ͠ঁੑͰୀձ ର৅γφϦΦ
  7. ಛఆͷػೳͷແޮԽͳͲɺE2EςετதʹϩδοΫͷ෼ذ Λ࡞Δ͜ͱ͕Ͱ͖ΔΑ͏ಠࣗεΩʔϚΛ࡞੒ ઓུᶄ E2E༻ͷಠࣗεΩʔϚ var isAvailable: Bool { #if E2E

    // E2Eςετத͸ৗʹfalse return false #else // Feature Flagʹઃఆ͞Εͨ஋Λฦ͢ return remoteConfig[.isEnable] #endif }