Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

約9000個の自動テストの 時間を50分->10分に短縮 Flakyテストを1%以下に抑えた話

hatsu
October 25, 2024

約9000個の自動テストの 時間を50分->10分に短縮 Flakyテストを1%以下に抑えた話

hatsu

October 25, 2024
Tweet

More Decks by hatsu

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ • Twitter: @hatsu_38 • GitHub: @hatsu38 • SHE Inc.

    • Rubyྺ 5೥ = ΤϯδχΞྺ • React.js / TypeScript / GitHub Actions • Ruby͕Ұ൪޷͖
  2. ٕज़ελοΫ🤖 • Backend: Ruby on Rails, GraphQL, Sidekiq • Frontend:

    React.js, TypeScript, Next.js • CI: GitHub Actions • Infrastructure: Kubenetes ฐࣾͷ͜ͱ🏢 7
  3. Model / Controller / Requests / System Spec, etc. ςετ਺

    7,803 case 2023.05.22 34QFD  $BQZCBSBΛར༻ ฐࣾͷ͜ͱ - 2023೥ͷςετͷঢ়گ🔍 Code to Test Ratio: 1:4.3 Test Coverage: 89%
  4. Model / Controller / Requests / System Spec, etc. ςετ࣌ؒ

    ฐࣾͷ͜ͱ - 2023೥ͷςετͷঢ়گ🔍 $*͕௨Δͷʹ෼Ҏ্🫠
  5. ೥ ೥ ςετ਺  DBTF $*ͷ࣌ؒ ෼ ฒྻ$PSF 'MBLZςετ ݸ

    ͘Β͍ͷ֬཰Ͱ$*͕མͪΔ (JU)VC"DUJPOTͷ஋ஈ   ฐࣾͷ͜ͱ - 2023೥ͷςετͷঢ়گ🔍 2023೥ͷςετͷঢ়گ🔍
  6. let_it_be(:admin) { create(:user) }ͰԿ͕ى͖͍ͯΔ͔ʁ ςετͷ͕࣌ؒ௕͍🐢 - test-profͷlet_it_beΛ࢖ͬͯσʔλ࡞੒Λলུ proc { @😸admin

    = create(:user) } before_all { @😸admin = create(:user) } let(:admin) { @😸admin } (`@😸admin` ͸before_allͰ࡞੒ࡁΈ)
  7. parallel_testsͱ͸ʁ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ $16@ .ݸͷ ςετϑΝΠϧ $16@ /ݸͷ ςετϑΝΠϧ

    ɾɾɾ $16@9 ,ݸͷ ςετϑΝΠϧ CPUݸ਺෼ʹςετϑΝΠϧΛ෼ׂͯ͠ɺ ςετΛฒྻʹ࣮ߦͤ͞Δ💡
  8. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘͯ͠഑ྻΛ࡞੒ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 73
  9. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 74
  10. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘͯ͠഑ྻΛ࡞੒ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 75 [ςετ໊, ςετϑΝΠϧByte਺]
  11. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 76 ͜ͷ഑ྻΛϑΝΠϧαΠζͷ߱ॱʹSort
  12. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 77 $16 $16 $16 $16
  13. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 78 $16 $16 $16 $16 ,ݸͷ ςετϑΝΠϧ .ݸͷ ςετϑΝΠϧ /ݸͷ ςετϑΝΠϧ -ݸͷ ςετϑΝΠϧ
  14. parallel_testsͰԿ͕ى͖ͯΔʁ(ྫ: fi le size sort) 1. CPUίΞ਺Λऔಘͯ͠ 2. ςετର৅ͷϑΝΠϧͷϑΝΠϧαΠζ(byte)Λऔಘ 3.

    ϑΝΠϧαΠζͷେ͖͍ॱʹฒͼସ͑ͯ 4. CPU਺ݸͷάϧʔϓΛ࡞ͬͯ 5. ϑΝΠϧαΠζͷେ͖͍ॱʹɺ߹ܭϑΝΠϧαΠζͷ࠷΋খ͍͞ά ϧʔϓʹɺϑΝΠϧΛ௥ՃΛ܁Γฦͯ͠άϧʔϓ࡞੒ 6. ֤$16ͰςετΛ࣮ߦ ςετͷ͕࣌ؒ௕͍🐢 - parallel_testsͷฒྻ࣮ߦΛ׆͔ͨ͢ΊʹϑΝΠϧ෼ׂ 79
  15. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 82
  16. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 83 खܰ͞: ˒˒˒˒ˑ ޮՌ: ˒˒ˑˑˑ
  17. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 84 Bad Good खܰ͞: ˒˒˒ˑˑ ޮՌ: ˒˒˒ˑˑ
  18. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 85 खܰ͞: ˒˒˒ˑˑ ޮՌ: ˒˒˒ˑˑ
  19. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 86 खܰ͞: ˒˒ˑˑˑ ޮՌ: ˒˒ˑˑˑ
  20. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 87 खܰ͞: ˒ˑˑˑˑ ޮՌ: ˒˒˒ˑˑ
  21. ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do ~

    endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ • ஗͍ςετϑΝΠϧ,஗͍ςετ, աڈࣦഊͨ͠ςετΛμογϡϘʔυԽ ςετͷ͕࣌ؒ௕͍🐢 - ͦͷଞɺࡉ͔ͳςετ࣌ؒ୹ॖͷͨΊͷࢪࡦ 88 खܰ͞: ˒ˑˑˑˑ ޮՌ: ˒˒ˑˑˑ
  22. • Next.js × TypeScript ͰϑϩϯτΤϯυ͸ಈ͍͍ͯΔ • Adminը໘ͱUserը໘ͦΕͧΕ͋ΔɻϦϙδτϦ͸1ͭɻ • ຖճ#VJME͚ͩͰ10෼Ҏ্͔͔͍ͬͯΔ •

    ฒྻ࣮ߦͱ͔͕ҙຯͳ͍ɻ͓ۚͰԥΕͳ͍ɻ • ςετલʹ#VJME͢Δඞཁ͕͋ΔͷͰલςετ͕͜ͷ࣮ߦ࣌ؒʹґଘ ͍ͯ͠Δ ςετલͷ#VJMEͷ͕࣌ؒ௕͍🥱 94 ςετલͷBuild
  23. • ςετ݁ՌΛྑ͍ײ͡ʹϨϙʔτ͢Δ΍ͭ • ςετͷ਺ • ΧόϨοδ • ςετ࣌ؒ • ςετ݁Ռཤྺ

    • εΫγϣͱ͔΋ඥ෇͚ΒΕΔ Flakyͳςετ͕ଟ͍💫 - CIͰςετ͕Failͨ͠ͱ͖ɺϩά΍εΫγϣͷ֬ೝ͕໘౗ 112 Allure Reportͱ͸ʁ
  24. • bundle exec rspec --format AllureRspecFormatter • ςετͷ৘ใΛKTPOʹग़ྗ • allure

    generate allure_results/* -o tmp/allure_report • ςετ݁ՌΛ)5.-ʹม׵ • ϓϧϦΫΤετຖʹςετ݁Ռͷ)5.-Λ7FSDFMʹσϓϩΠ • ςετࣦഊ࣌ʹ͸7FSDFMͷ63-Λ#PU͕ίϝϯτͰڭ͑ͯ͘ΕΔ Flakyͳςετ͕ଟ͍💫 - CIͰςετ͕Failͨ͠ͱ͖ɺϩά΍εΫγϣͷ֬ೝ͕໘౗ 113 Allure Report͓஌ΒͤBotΛ࡞੒
  25. • bundle exec rspec --format AllureRspecFormatter • ςετͷ৘ใΛKTPOʹग़ྗ • allure

    generate allure_results/* -o tmp/allure_report • ςετ݁ՌΛ)5.-ʹม׵ • ϓϧϦΫΤετຖʹςετ݁Ռͷ)5.-Λ7FSDFMʹσϓϩΠ • ςετࣦഊ࣌ʹ͸7FSDFMͷ63-Λ#PU͕ίϝϯτͰڭ͑ͯ͘ΕΔ Flakyͳςετ͕ଟ͍💫 - CIͰςετ͕Failͨ͠ͱ͖ɺϩά΍εΫγϣͷ֬ೝ͕໘౗ 114 Allure ReportΛಋೖ
  26. • bundle exec rspec --format AllureRspecFormatter • ςετͷ৘ใΛKTPOʹग़ྗ • allure

    generate allure_results/* -o tmp/allure_report • ςετ݁ՌΛ)5.-ʹม׵ • ϓϧϦΫΤετຖʹςετ݁Ռͷ)5.-Λ7FSDFMʹσϓϩΠ • ςετࣦഊ࣌ʹ͸7FSDFMͷ63-Λ#PU͕ίϝϯτͰڭ͑ͯ͘ΕΔ Flakyͳςετ͕ଟ͍💫 - CIͰςετ͕Failͨ͠ͱ͖ɺϩά΍εΫγϣͷ֬ೝ͕໘౗ 115 Allure ReportΛಋೖ
  27. • bundle exec rspec --format AllureRspecFormatter • ςετͷ৘ใΛKTPOʹग़ྗ • allure

    generate allure_results/* -o tmp/allure_report • ςετ݁ՌΛ)5.-ʹม׵ • ϓϧϦΫΤετຖʹςετ݁Ռͷ)5.-Λ7FSDFMʹσϓϩΠ • ςετࣦഊ࣌ʹ͸7FSDFMͷ63-Λ#PU͕ίϝϯτͰڭ͑ͯ͘ΕΔ Flakyͳςετ͕ଟ͍💫 - CIͰςετ͕Failͨ͠ͱ͖ɺϩά΍εΫγϣͷ֬ೝ͕໘౗ 116 Allure ReportΛಋೖ
  28. • bundle exec rspec --format AllureRspecFormatter • ςετͷ৘ใΛKTPOʹग़ྗ • allure

    generate allure_results/* -o tmp/allure_report • ςετ݁ՌΛ)5.-ʹม׵ • ϓϧϦΫΤετຖʹςετ݁Ռͷ)5.-Λ7FSDFMʹσϓϩΠ • ςετࣦഊ࣌ʹ͸7FSDFMͷ63-Λ#PU͕ίϝϯτͰڭ͑ͯ͘ΕΔ Flakyͳςετ͕ଟ͍💫 - CIͰςετ͕Failͨ͠ͱ͖ɺϩά΍εΫγϣͷ֬ೝ͕໘౗ 117 Allure ReportΛಋೖ
  29. • playwrightͱ͍͏ςετϑϨʔϜϫʔΫΛcapybara͔Β࢖͑Δ • εΫϦʔϯγϣοτ͚ͩ͡Όͳ͘ςετ࣌ͷಈը͕ݟΒΕΔ • ։ൃऀπʔϧʹࡌͬͯΔΑ͏ͳωοτϫʔΫ΋ݟΒΕΔ • Allure Report ্ͰݟΒΕΔ

    • Rails 7.1ʹ΋औΓࠐ·Ε͍ͯΔ Flakyͳςετ͕ଟ͍💫 - CI্Ͱ͔͠ൃੜ͠ͳ͍FlakyͷݪҼ͕ෆ໌ 124 capybara-playwright-driverͱ͸ʁ
  30. • playwrightͱ͍͏ςετϑϨʔϜϫʔΫΛcapybara͔Β࢖͑Δ • εΫϦʔϯγϣοτ͚ͩ͡Όͳ͘ςετ࣌ͷಈը͕ݟΒΕΔ • ։ൃऀπʔϧʹࡌͬͯΔΑ͏ͳωοτϫʔΫ΋ݟΒΕΔ • Allure Report ্ͰݟΒΕΔ

    • Rails 7.1ʹ΋औΓࠐ·Ε͍ͯΔ Flakyͳςετ͕ଟ͍💫 - CI্Ͱ͔͠ൃੜ͠ͳ͍FlakyͷݪҼ͕ෆ໌ 125 capybara-playwright-driverͱ͸ʁ capybara.rb
  31. • playwrightͱ͍͏ςετϑϨʔϜϫʔΫΛcapybara͔Β࢖͑Δ • εΫϦʔϯγϣοτ͚ͩ͡Όͳ͘ςετ࣌ͷಈը͕ݟΒΕΔ • ։ൃऀπʔϧʹࡌͬͯΔΑ͏ͳωοτϫʔΫ΋ݟΒΕΔ • Allure Report ্ͰݟΒΕΔ

    • Rails 7.1ʹ΋औΓࠐ·Ε͍ͯΔ Flakyͳςετ͕ଟ͍💫 - CI্Ͱ͔͠ൃੜ͠ͳ͍FlakyͷݪҼ͕ෆ໌ 126 capybara-playwright-driverͱ͸ʁ
  32. • playwrightͱ͍͏ςετϑϨʔϜϫʔΫΛcapybara͔Β࢖͑Δ • εΫϦʔϯγϣοτ͚ͩ͡Όͳ͘ςετ࣌ͷಈը͕ݟΒΕΔ • ։ൃऀπʔϧʹࡌͬͯΔΑ͏ͳωοτϫʔΫ΋ݟΒΕΔ • Allure Report ্ͰݟΒΕΔ

    • Rails 7.1ʹ΋औΓࠐ·Ε͍ͯΔ Flakyͳςετ͕ଟ͍💫 - CI্Ͱ͔͠ൃੜ͠ͳ͍FlakyͷݪҼ͕ෆ໌ 127 capybara-playwright-driverͱ͸ʁ https://trace.playwright.dev/
  33. • playwrightͱ͍͏ςετϑϨʔϜϫʔΫΛcapybara͔Β࢖͑Δ • εΫϦʔϯγϣοτ͚ͩ͡Όͳ͘ςετ࣌ͷಈը͕ݟΒΕΔ • ։ൃऀπʔϧʹࡌͬͯΔΑ͏ͳωοτϫʔΫ΋ݟΒΕΔ • Allure Report ্ͰݟΒΕΔ

    • Rails 7.1ʹ΋औΓࠐ·Ε͍ͯΔ Flakyͳςετ͕ଟ͍💫 - CI্Ͱ͔͠ൃੜ͠ͳ͍FlakyͷݪҼ͕ෆ໌ 128 capybara-playwright-driverͱ͸ʁ
  34. • playwrightͱ͍͏ςετϑϨʔϜϫʔΫΛcapybara͔Β࢖͑Δ • εΫϦʔϯγϣοτ͚ͩ͡Όͳ͘ςετ࣌ͷಈը͕ݟΒΕΔ • ։ൃऀπʔϧʹࡌͬͯΔΑ͏ͳωοτϫʔΫ΋ݟΒΕΔ • Allure Report ্ͰݟΒΕΔ

    • Rails 7.1ʹ΋औΓࠐ·Ε͍ͯΔ Flakyͳςετ͕ଟ͍💫 - CI্Ͱ͔͠ൃੜ͠ͳ͍FlakyͷݪҼ͕ෆ໌ 129 capybara-playwright-driverͱ͸ʁ
  35. ೥ ೥ ςετ਺  DBTF $*ͷ࣌ؒ ෼ ฒྻ$PSF 'MBLZςετ ݸ

    ͘Β͍ͷ֬཰Ͱ$*͕མͪΔ (JU)VC"DUJPOTͷ஋ஈ   ·ͱΊ 2023೥ͷςετͷঢ়گ🔍
  36. 2024೥ͷςετͷঢ়گ🔍 ೥ ೥ ςετ਺  DBTF  DBTF $*ͷ࣌ؒ ෼

    ฒྻ$PSF ෼ඵ🎉 ฒྻ 'MBLZςετ ݸ ͘Β͍ͷ֬཰Ͱ$*͕མͪΔ ݸ🎉 ͘Β͍ͷ֬཰Ͱ$*͕མͪΔ (JU)VC"DUJPOTͷ஋ஈ    🎉 ·ͱΊ
  37. ΍ͬͨ͜ͱҰཡ • FactoryBot.create() Ͱ͸ͳ͘ FactoryBot.build_stubbed()Λ ࢖͏ • ෼͚ͳ͍͍ͯ͘ςετ͸ɺ1ͭͷ it do

    ~ endʹ·ͱΊΔ • ͍Βͳ͍ػೳ΍ςετ͸࡟আ • LoadingΛ଴ͭॲཧ΋ՄೳͳΒ࡟আ • KnapsackPro gem΋ར༻ ·ͱΊ 145