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.3k
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
6.4k
Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?
yusukeiwaki
7
4.3k
ChatGPTを個々人が使っていた組織から チームチャットにボットを棲まわせて みんなが活用する組織になるまでの変遷 ぜんぶ紹介しちゃいます
yusukeiwaki
0
2.8k
Fukuoka.rb_0x100_LT.pdf
yusukeiwaki
0
400
Railsの システムテスト解剖学
yusukeiwaki
8
7.2k
RailsのSystem specから 🎭Playwrightを使う
yusukeiwaki
2
14k
puppeteer-ruby: Ruby/Railsのためのブラウザオートメーションツール
yusukeiwaki
0
1.7k
20200730_Selenium+Capybaraで不安定なテストをPuppeteerで補強してみる
yusukeiwaki
0
3.2k
Other Decks in Technology
See All in Technology
Claude Codeから我々が学ぶべきこと
oikon48
10
2.8k
ファッションコーディネートアプリ「WEAR」における、Vertex AI Vector Searchを利用したレコメンド機能の開発・運用で得られたノウハウの紹介
zozotech
PRO
0
580
プロジェクトマネジメントは不確実性との対話だ
hisashiwatanabe
0
120
Infrastructure as Prompt実装記 〜Bedrock AgentCoreで作る自然言語インフラエージェント〜
yusukeshimizu
1
150
20250807 Applied Engineer Open House
sakana_ai
PRO
2
550
Amazon Inspector コードセキュリティで手軽に実現するシフトレフト
maimyyym
0
130
Serverless Meetup #21
yoshidashingo
1
130
自治体職員がガバクラの AWS 閉域ネットワークを理解するのにやって良かった個人検証環境
takeda_h
0
140
テストを実行してSorbetのsigを書こう!
sansantech
PRO
1
130
Foundation Model × VisionKit で実現するローカル OCR
sansantech
PRO
1
400
工業高校で学習したとあるエンジニアのキャリアの話
shirayanagiryuji
0
120
MCP認可の現在地と自律型エージェント対応に向けた課題 / MCP Authorization Today and Challenges to Support Autonomous Agents
yokawasa
5
2.5k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
207
24k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.3k
Writing Fast Ruby
sferik
628
62k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
GitHub's CSS Performance
jonrohan
1031
460k
Site-Speed That Sticks
csswizardry
10
770
Being A Developer After 40
akosma
90
590k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
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։ൃ͍ͯ͠·͢ɻ ͥͻͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ͕͋ΕͲΜͲΜཁ͍ͩ͘͞ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠