Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
E2E testing on Rails 2023
Search
Yusuke Iwaki
October 27, 2023
Technology
4
3.1k
E2E testing on Rails 2023
Kaigi on Rails 2023 発表スライド
Yusuke Iwaki
October 27, 2023
Tweet
Share
More Decks by Yusuke Iwaki
See All by Yusuke Iwaki
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
12
4.6k
Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?
yusukeiwaki
7
3.3k
ChatGPTを個々人が使っていた組織から チームチャットにボットを棲まわせて みんなが活用する組織になるまでの変遷 ぜんぶ紹介しちゃいます
yusukeiwaki
0
2.6k
Fukuoka.rb_0x100_LT.pdf
yusukeiwaki
0
370
Railsの システムテスト解剖学
yusukeiwaki
7
6.9k
RailsのSystem specから 🎭Playwrightを使う
yusukeiwaki
2
13k
puppeteer-ruby: Ruby/Railsのためのブラウザオートメーションツール
yusukeiwaki
0
1.6k
20200730_Selenium+Capybaraで不安定なテストをPuppeteerで補強してみる
yusukeiwaki
0
3.1k
Other Decks in Technology
See All in Technology
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
2
200
頻繁リリース × 高品質 = 無理ゲー? いや、できます!/20250306 Shoki Hyo
shift_evolve
0
140
Agile TPIを活用した品質改善事例
tomasagi
0
160
新卒エンジニア研修の試行錯誤と工夫/nikkei-tech-talk-31
nishiuma
0
170
技術好きなエンジニアが _リーダーへの進化_ によって得たものと失ったもの / The Gains and Losses of a Tech-Enthusiast Engineer’s “Evolution into Leadership”
kaminashi
0
190
Alpine.js を活用した Laravel MPA フロントエンド最適化戦略 / Alpine.js MPA
tzmfreedom
1
870
EM初心者として半年間マネジャーをやってみて分かったこと
sansantech
PRO
0
200
LINE Notify互換のボットを作った話
kenichirokimura
0
100
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.1k
SLI/SLO・ラプソディあるいは組織への適用の旅
nwiizo
4
1.1k
日本MySQLユーザ会ができるまで / making MyNA
tmtms
1
270
SpannerとAurora DSQLの同時実行制御の違いに想いを馳せる
masakikato5
0
540
Featured
See All Featured
The Language of Interfaces
destraynor
156
24k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7.1k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
22
2.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
50
2.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
490
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Typedesign – Prime Four
hannesfritz
41
2.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Speed Design
sergeychernyshev
28
850
4 Signs Your Business is Dying
shpigford
183
22k
Transcript
&&UFTUJOHPO3BJMT !:VTVLF*XBLJ,BJHJPO3BJMT
&&UFTUJOHPO3BJMT ຊͷ͓
&OEUP&OEUFTUJOH ɾ3BJMT͔ΒγεςϜςετ͕͑Δ ɾ$BQZCBSB 4FMFOJVNͰॻ͘ϒϥβςετ ˠ͓ੈࣙʹ։ൃମݧ͕ྑ͍ͱݴ͑ͳ͍ɻ ͋ʔɺ͜ΕམͪΔςετͳɻ ϦτϥΠɹΆͪͬ
γεςϜςετղֶ ͳͥςετ͕ෆ҆ఆʹͳΔͷ͔ɺͲ͏ରॲ͢ΕΑ͍ͷ͔Λߟͨ͠ɻ IUUQTLBJHJPOSBJMTPSHUBMLT:VTVLF*XBLJ
ੈͷதͷྲྀΕ/PEFKTʹ IUUQTTUBSIJTUPSZDPNUFBNDBQZCBSBDBQZCBSBDZQSFTTJPDZQSFTTNJDSPTPGUQMBZXSJHIU%BUF /PEFKTϕʔεͷςετϥϯφʔΛओ࣠ͱͯ͠ 3BJMTͱͲͷΑ͏ʹڠௐ͍͔ͤͯ͘͞ʁΛߟ͑Δɻ
ຊ͢͜ͱɾ͞ͳ͍͜ͱ w͢͜ͱ w3BJMTͷγεςϜςετͷಈ͖ wطଘͷΈ wDZQSFTTPOSBJMT DZQSFTTSBJMT w/PEFKTϕʔεͷςετϥϯφʔͱڠௐͤ͞ΔͨΊʹɺ3BJMT͕Ͱ͖Δ͜ͱ w͞ͳ͍͜ͱ w̋̋ϥΠϒϥϦ͏ͱ͍͍Αʙ wෆ҆ఆͳςετΛͳ͘͢ʹ˚˚ͨ͠΄͏͕͍͍Αʙ
3BJMTͷγεςϜςετ͓͞Β͍
3BJMTͷγεςϜςετ 3BJMTىಈˠϒϥβىಈˠࣗಈૢ࡞
34QFD ͜ͷஈ֊Ͱ 3BJMTαʔόʔ ϒϥβىಈ͍ͯ͠ͳ͍
34QFD ॳΊͯ$BQZCBSB%4-Λ͏ॴ 3BJMTαʔόʔىಈ ϒϥβىಈ
,BJHJPO3BJMTγεςϜςετղֶɹͷεϥΠυ͔Βൈਮ 3BJMTαʔόʔىಈ
$BQZCBSBTFMFOJVNESJWFS DBQZCBSBQMBZXSJHIUESJWFS ϒϥβىಈ
MPDBMIPTUMPHJO $BQZCBSB #SPXTFS υϥΠό $BQZCBSB 4FTTJPO WJTJU WJTJU WJTJU υϥΠόͷ
࣮ʹΑΔ (&5MPHJO MPDBMIPTUMPHJO -PHJO
MPDBMIPTUMPHJO $BQZCBSB #SPXTFS υϥΠό $BQZCBSB 4FTTJPO pMM@JO pMM@JO pOE TFU
-PHJO MPDBMIPTUMPHJO -PHJO JOQVU<OBNFVTFSOBNF> :VTVLF*XBLJ
MPDBMIPTUMPHJO $BQZCBSB υϥΠό pMM@JO pOE TFU -PHJO JOQVU<OBNFQBTTXPSE> MPDBMIPTUMPHJO -PHJO
:VTVLF*XBLJ
MPDBMIPTUMPHJO υϥΠό pOE DMJDL -PHJO CVUUPO<UFYU-PHJO> MPDBMIPTUMPHJO MPDBMIPTUMPHJO -PHJO :VTVLF*XBLJ
$BQZCBSB DMJDL@CVUUPO
MPDBMIPTUTFTTJPOT MPDBMIPTUEBTICPBSE MPDBMIPTUEBTICPBSE -PHJO 1045TFTTJPOT (&5EBTICPBSE $BQZCBSB υϥΠό HPUP
WJTJU ϩάΠϯྃΛͨͣʹ࣍ʹਐΉ ͓ͬͱɾɾɾ
$BQZCBSB υϥΠό IBWF@UFYU pOE@YQBUI MPDBMIPTUEBTICPBSE %"4)#0"3%
34QFD 3FQPSU $POTPMF "MMVSFSFQPSU
1MBZXSJHIUςετϥϯφʔ w OQYDSFBUFQMBZXSJHIU OQNJOJUQMBZXSJHIU Ͱڥߏங w QMBZXSJHIUDPO fi HUTͰ8FCαʔόʔςετϒϥβڥΛهड़ w
1Z5FTUͬΆ͍ fi YUVSFTΛར༻ͨ͠ςετσʔλੜ
QMBZXSJHIUDPO fi HUT w QSPKFDUTͰڥهड़ w $ISPNJVN 'JSFGPY 8FC,JUʹɹ ΑΔςετ
w XFC4FSWFSͰςεταʔόʔهड़ w ෳαʔόʔىಈՄೳ
ςεταʔόʔىಈ
ϒϥβىಈ
ࣗಈૢ࡞ :VTVLF*XBLJ ͳΜͯΒͳ͍Αʁ
MPDBMIPTUMPHJO -PHJO :VTVLF*XBLJ ਖ਼͍͠ใΛೖྗ͍ͯͩ͘͠͞
3FQPSU -JOF "MMVSFSFQPSU )UNM ;JQ
1MBZXSJHIUςετϥϯφʔ w OQYDSFBUFQMBZXSJHIU OQNJOJUQMBZXSJHIU Ͱڥߏங w QMBZXSJHIUDPO fi HUTͰ8FCαʔόʔςετϒϥβڥΛهड़ w
1Z5FTUͬΆ͍ fi YUVSFTΛར༻ͨ͠ςετσʔλੜ
1Z5FTUͷ'JYUVSFT
1Z5FTUͷ'JYUVSFT ґଘ͢ΔϑΟΫενϟΛݺͼग़͠ ґଘ͢ΔϑΟΫενϟΛݺͼग़͠ ґଘ͢ΔϑΟΫενϟΛݺͼग़͠
1Z5FTUͷ'JYUVSFT ϑΟΫενϟͷޙॲཧॻ͚Δ 34QFDͩͱ #&(*/30--#"$, Ͱશ෦ϩʔϧόοΫ͢Δͷ͕ৗ
1MBZXSJHIUͷ fi YUVSFT ґଘ͢ΔϑΟΫενϟΛݺͼग़͠
ͦ͏͍ͬͯ ϑΝΫτϦͱϞοΫ͍͍ͨʜ ຊʹ'JSFCBTFϓογϡΛૹΔΘ͚ʹ͍͔ͳ͍ 'BDUPSZ#PUͷఆٛ࠶ར༻͍ͨ͠
طଘϥΠϒϥϦ͕ ͲΜͳ͍ͯ͠Δ͔ݟͯΈΔ
طଘϥΠϒϥϦ w DZQSFTTSBJMT w DZQSFTTPOSBJMT
DZQSFTTSBJMT w 1VNB ςεταʔόʔ $ZQSFTTηοτͷಠࣗςετڥΛཱͯΔ w SBLFDZQSFTTYYYͱ͍͏DZQSFTTϥοϓίϚϯυ͕༻ҙ͞Ε͍ͯΔɻ w σϑΥϧτͰ3"*-4@&/7UFTUͰαʔόʔىಈ w
1VNBαʔόʔىಈ෦ɺ$BQZCBSBͷίʔυͷίϐʔ࣮ w 5SBOTBDUJPOBM5FTUΛߦ͏ɻ%#ίωΫγϣϯڞ༗ʢMPDL@UISFBEʣɹɹ ΄ͱΜͲ"DUJWF3FDPSEͷίʔυͷίϐʔ࣮
DZQSFTTSBJMT 1VNB ಠࣗϛυϧΣΞ SBLFDZQSFTTSVO (&5@@JEFOUJUZ@@ ϧʔτఆٛ ىಈྃ͢Δ·ͰϙʔϦϯά (&5@@JEFOUJUZ@@ (&5DZQSFTT@SBJMT@SFTFU@TUBUF ϧʔτఆٛ
3"*-4@&/7UFTUͰαʔόʔىಈ $ZQSFTTىಈ DZQSFTTSVO beforeEach(() => { cy.request('/cypress_rails_reset_state') }) GET /cypress_rails_reset_state GET /cypress_rails_reset_state UFTU %# ROLLBACK BEGIN ROLLBACK BEGIN reset_stateϦΫΤετΛड͚ͨ ࣍ͷHTTPϦΫΤετ࣌ʹ ROLLBACKͱBEGIN͢Δ
DZQSFTTPOSBJMT w ͋ͳͨͷ3BJMTΞϓϦέʔγϣϯΛɺ$ZQSFTT1MBZXSJHIUͱରͤ͞ΔͨΊͷ ςεταʔόʔʹ͢Δ͚ͩ w 3BJMTαʔόʔखͰىಈ͢Δɻ w 3BJMTଆʹίϯτϩʔϧ༻ͷΤϯυϙΠϯτΛੜ͚ͩ͢ w 'BDUPSZ#PUΛݺͼग़͢ΤϯυϙΠϯτGBDUPSZ@CPU
w ҙͷ3BJMTίʔυΛ࣮ߦͰ͖ΔΤϯυϙΠϯτFWBM w %BUBCBTF$MFBOFSΛͬͯɺςετσʔλΛআ͢ΔΤϯυϙΠϯτDMFBO
DZQSFTTPOSBJMT ಠࣗϛυϧΣΞ $:13&44CJOSBJMTTFSWFS (&5@@FF@@DPNNBOE ϧʔτఆٛ ɾFactoryBot ݺͼग़͠ ɾҙͷίϚϯυ࣮ߦ ɾσʔλ clean
ςετπʔϧ/PEFKTͷͷΛͦͷ··͏ ඞཁͳλΠϛϯάͰ )551ΞΫηεͯ͠ݺͼग़͠
ͦ͏͍ͬͯ ϑΝΫτϦͱϞοΫ͍͍ͨʜ ຊʹ'JSFCBTFϓογϡΛૹΔΘ͚ʹ͍͔ͳ͍ 'BDUPSZ#PUͷఆٛ࠶ར༻͍ͨ͠
ϞοΫελϒ w 34QFDͩͱಛఆͷςετͷ͚ؒͩϝιουͷڍಈΛม͑Δ͜ͱͰ͖Δ w BMMPX@BOZ@JOTUBODF@PGʜ 3F fi OFNFOUT ͳͲ w
(&5IPHF͞Ε͔ͯΒ(&5GVHB͞ΕΔ·ͰϞοΫͲ͏͢Δɾɾɾʁ w ຊʹͳ͍ͳΒࣗͰ࡞Δ͔͠ͳ͍ʜ
TJNQMF@TUVC ಠࣗϛυϧΣΞ ςετલ४උ DVSSFOU@VTFSΛϞοΫ ςετલ४උ VTFSΛ̍ਓ࡞ ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ 1045@@FF@@FWBM 4JNQMF4UVCGPS@JOTUBODF@NFUIPE
"QQMJDBUJPO$POUSPMMFS DVSSFOU@VTFS \6TFS fi STU^BQQMZ 1045@@FF@@FWBM 4JNQMF4UVCGPS@JOTUBODF@NFUIPE "QQMJDBUJPO$POUSPMMFS DVSSFOU@VTFS \6TFS fi STU^SFTFU
1MBZXSJHIUͷ fi YUVSFTͰϞοΫΛ࣮ݱ ಠࣗϛυϧΣΞ ςετલ४උ VTFSΛ̍ਓ࡞ ςετલ४උ DVSSFOU@VTFSΛϞοΫ ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ
+PIO
1MBZXSJHIUͷ fi YUVSFTͰϞοΫΛ࣮ݱ ಠࣗϛυϧΣΞ ςετલ४උ VTFSΛ̍ਓ࡞ ςετલ४උ DVSSFOU@VTFSΛϞοΫ ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ
+PIO $VSSFOUVTFS
1MBZXSJHIUͷ fi YUVSFTͰϞοΫΛ࣮ݱ ಠࣗϛυϧΣΞ ςετલ४උ VTFSΛ̍ਓ࡞ ςετલ४උ DVSSFOU@VTFSΛϞοΫ ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ
+PIO $VSSFOUVTFS +PIO
1MBZXSJHIUͷ fi YUVSFTͰϞοΫΛ࣮ݱ ಠࣗϛυϧΣΞ ςετલ४උ VTFSΛ̍ਓ࡞ ςετલ४උ DVSSFOU@VTFSΛϞοΫ ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ
+PIO
3BJMTΒ͘͠ɺϞοΫϑΝΫτϦΛ׆༻ͭͭ͠ /PEFKTϕʔεͷϥϯφʔͰςετͰ͖ͨʂʂ ʘ ?P? ʗ
ʂ
ʂ ಠࣗϛυϧΣΞ +PIOΛ࡞ͯ͠ $VSSFOUVTFSʹ *%:VTVLF*XBLJ 1BTT ͰϩάΠϯ %BTICPBSETQFD -PHJOTQFD
+PIO $VSSFOUVTFS
ʂ ಠࣗϛυϧΣΞ +PIOΛ࡞ͯ͠ $VSSFOUVTFSʹ *%:VTVLF*XBLJ 1BTT ͰϩάΠϯ %BTICPBSETQFD -PHJOTQFD
+PIO $VSSFOUVTFS /PEFKTϕʔεͷςετϥϯφʔ ϊϯϒϩοΩϯά*0ϑϧ׆༻ جຊతʹฒྻςετʂ
ʂ ಠࣗϛυϧΣΞ +PIOΛ࡞ͯ͠ $VSSFOUVTFSʹ *%:VTVLF*XBLJ 1BTT ͰϩάΠϯ %BTICPBSETQFD -PHJOTQFD
+PIO $VSSFOUVTFS $BQZCBSBͷͱ͖ʹฒྻ࣮ߦͳΜͯ ҙࣝͯ͠ॻ͍ͯͳ͔ͬͨʜPS[
ςετϫʔΧʔ͝ͱʹରαʔόʔΛม͍͑ͨ %BTICPBSETQFD -PHJOTQFD ಠࣗϛυϧΣΞ %# ಠࣗϛυϧΣΞ %# +PIO $VSSFOUVTFS :VTVLF*XBLJ
ςετϫʔΧʔ͝ͱʹରαʔόʔΛม͍͑ͨ %BTICPBSETQFD -PHJOTQFD ಠࣗϛυϧΣΞ %# ಠࣗϛυϧΣΞ %# +PIO $VSSFOUVTFS :VTVLF*XBLJ
4IBSEJOHͰແཧΓฒྻԽʜ %BTICPBSETQFD -PHJOTQFD ಠࣗϛυϧΣΞ %# ಠࣗϛυϧΣΞ %# +PIO $VSSFOUVTFS :VTVLF*XBLJ
OQYQMBZXSJHIUUFTU TIBSESFQPSUFSCMPC OQYQMBZXSJHIUUFTU TIBSESFQPSUFSCMPC 1035 1035
4IBSEJOHͰແཧΓฒྻԽʜ %BTICPBSETQFD -PHJOTQFD ಠࣗϛυϧΣΞ %# ಠࣗϛυϧΣΞ %# +PIO $VSSFOUVTFS :VTVLF*XBLJ
OQYQMBZXSJHIUUFTU TIBSESFQPSUFSCMPC OQYQMBZXSJHIUUFTU TIBSESFQPSUFSCMPC QPSU QPSU ίϨδϟφΠײ ฒྻςετըظత͕ͩɺզʑʹ·ͩ͗͢Δɻ
·ͣྻςετ͔Β࢝ΊΑ͏
·ͱΊ&OEUP&OEUFTUJOHPO3BJMT ɾ3BJMTΞϓϦέʔγϣϯΛ/PEFKTϕʔεͷςετϥϯφʔ Ͱ3BJMTͬΆ͍Γ͔ͨͰγεςϜςετ͢Δํ๏Λߟͨ͠ ɾ3BDLϛυϧΣΞͰɺίϯτϩʔϧ༻ΤϯυϙΠϯτΛ༻ ҙ͢Δ͚ͩͰɺ1MBZXSJHIUςετϥϯφʔͷ։ൃମݧͷྑ͞ Λڗड͢Δ͜ͱͰ͖ͨɻ ɾͨͩ͠ฒྻςετ·ͩզʑʹૣ͔ͬͨʜɻྻςετ ͔Β࢝ΊͯΈΑ͏ɻ
એ1MBZXSJHIUΛ3VCZ͔Β͑Δ044 ɾͦ͏͍ͬͯɺ$BQZCBSBͰ1MBZXSJHIU͍͍ͨΑͶX w 1MBZXSJHIUΛ3VCZ͔Β͑ΔΑ͏(FN։ൃ͍ͯ͠·͢ɻ ͥͻͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ͕͋ΕͲΜͲΜཁ͍ͩ͘͞ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠