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
2.6k
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
ChatGPTを個々人が使っていた組織から チームチャットにボットを棲まわせて みんなが活用する組織になるまでの変遷 ぜんぶ紹介しちゃいます
yusukeiwaki
0
1.7k
Fukuoka.rb_0x100_LT.pdf
yusukeiwaki
0
320
Railsの システムテスト解剖学
yusukeiwaki
7
6.1k
RailsのSystem specから 🎭Playwrightを使う
yusukeiwaki
2
10k
puppeteer-ruby: Ruby/Railsのためのブラウザオートメーションツール
yusukeiwaki
0
1.4k
20200730_Selenium+Capybaraで不安定なテストをPuppeteerで補強してみる
yusukeiwaki
0
2.8k
Other Decks in Technology
See All in Technology
脆弱星に導かれて
nishimunea
1
1.5k
RAGHack: Kickoff and RAG 101
pamelafox
0
200
Practical GenAI with Go - Elastic and Golang Sydney
adriancole
0
130
エンジニア視点で見る、 組織で運用されるデザインシステムにするには
shunya078
1
160
技術ブログや登壇資料を秒で作るコツ伝授します
minorun365
PRO
16
4.4k
EitherT_with_Future
aoiroaoino
0
380
#Zenoh 完全に理解した 〜組込み純情篇〜
takasehideki
1
450
ことばをそろえる / Bridging the Terminology Gap
amaotone
5
1k
自社開発した大規模言語モデルをどうプロダクションに乗せて運用していくか〜インフラ編〜
pfn
PRO
4
680
20240828_EM_Fest
kzkmaeda
4
360
Dive Deep in Cloud Run: Automatic Base Image update
aoto
PRO
0
900
20240906_JAWS_Yamanashi_#1_leap_beyond_the_AWS_all_certifications
tsumita
1
100
Featured
See All Featured
In The Pink: A Labor of Love
frogandcode
139
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
How STYLIGHT went responsive
nonsquared
93
5.1k
Rails Girls Zürich Keynote
gr2m
93
13k
Scaling GitHub
holman
458
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
363
22k
RailsConf 2023
tenderlove
26
790
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
The Straight Up "How To Draw Better" Workshop
denniskardys
230
130k
Clear Off the Table
cherdarchuk
90
320k
Building Better People: How to give real-time feedback that sticks.
wjessup
359
18k
Designing for humans not robots
tammielis
248
25k
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։ൃ͍ͯ͠·͢ɻ ͥͻͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ͕͋ΕͲΜͲΜཁ͍ͩ͘͞ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠