Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
あなたのWebサービスはAIに自動テストしてもらえる?アクセシビリティツリーで読み解く、AIの『視点』
yusukeiwaki
1
7k
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
12
7.6k
Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?
yusukeiwaki
7
5k
ChatGPTを個々人が使っていた組織から チームチャットにボットを棲まわせて みんなが活用する組織になるまでの変遷 ぜんぶ紹介しちゃいます
yusukeiwaki
0
3k
Fukuoka.rb_0x100_LT.pdf
yusukeiwaki
0
410
Railsの システムテスト解剖学
yusukeiwaki
8
7.4k
RailsのSystem specから 🎭Playwrightを使う
yusukeiwaki
2
15k
puppeteer-ruby: Ruby/Railsのためのブラウザオートメーションツール
yusukeiwaki
0
1.7k
20200730_Selenium+Capybaraで不安定なテストをPuppeteerで補強してみる
yusukeiwaki
0
3.3k
Other Decks in Technology
See All in Technology
Introduction to Bill One Development Engineer
sansan33
PRO
0
320
AS59105におけるFreeBSD EtherIPの運用と課題
x86taka
0
300
Dify on AWS の選択肢
ysekiy
0
110
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
進化の早すぎる生成 AI と向き合う
satohjohn
0
170
ブラウザ拡張のセキュリティの話 / Browser Extension Security
flatt_security
0
210
スタートアップの事業成長を支えるアーキテクチャとエンジニアリング
doragt
1
9.2k
私も懇親会は苦手でした ~苦手だからこそ懇親会を楽しむ方法~ / 20251127 Masaki Okuda
shift_evolve
PRO
4
200
AI時代のインシデント対応 〜時代を切り抜ける、組織アーキテクチャ〜
jacopen
4
170
DGX SparkでローカルLLMをLangChainで動かした話
ruzia
0
100
Data Hubグループ 紹介資料
sansan33
PRO
0
2.3k
GitHub を組織的に使いこなすために ソニーが実践した全社展開のプラクティス
sony
13
7.4k
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
980
Code Reviewing Like a Champion
maltzj
527
40k
4 Signs Your Business is Dying
shpigford
186
22k
GitHub's CSS Performance
jonrohan
1032
470k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
680
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
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։ൃ͍ͯ͠·͢ɻ ͥͻͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ͕͋ΕͲΜͲΜཁ͍ͩ͘͞ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠