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.2k
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
5.4k
Capybara+生成AIでどこまで本当に自然言語のテストを書けるか?
yusukeiwaki
7
3.7k
ChatGPTを個々人が使っていた組織から チームチャットにボットを棲まわせて みんなが活用する組織になるまでの変遷 ぜんぶ紹介しちゃいます
yusukeiwaki
0
2.7k
Fukuoka.rb_0x100_LT.pdf
yusukeiwaki
0
380
Railsの システムテスト解剖学
yusukeiwaki
7
7k
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
AIエージェントのオブザーバビリティについて
yunosukey
1
430
本番環境への影響リスクが低い Real Application Testing (SQL Performance Analyzer) の実施方法の検討と実践
jri_narita
0
230
正解のない未知(インボイス制度対応)をフルサイクル開発で乗り越える方法 / How to overcome the unknown invoice system with full cycle development
carta_engineering
0
170
激動の一年を通じて見えてきた「技術でリードする」ということ
ktr_0731
8
8.6k
AWS_MCP_Servers入門.pdf
naotoiso
0
200
スイッチのBMC、つかってますか?
sonic
0
500
Software Delivery Observability CI・CD , DORA metrics も Datadog で可視化しよう / datadog-ci-cd-observability
parupappa2929
0
190
Tailwind CSS の小話「コンテナークエリーって便利」
yamaday
0
160
SaaS公式MCPサーバーをリリースして得た学び
kawamataryo
5
1.4k
Sleep-time Compute: LLM推論コスト削減のための事前推論
sergicalsix
1
160
ホワイトボックス& SONiC アーキテクチャ(全体像) - SONiC Workshop Japan 2025
ebiken
PRO
1
440
Google CloudのAI Agent関連のサービス紹介
shukob
0
180
Featured
See All Featured
Fireside Chat
paigeccino
37
3.4k
A Tale of Four Properties
chriscoyier
159
23k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Music & Morning Musume
bryan
47
6.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
105
19k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Facilitating Awesome Meetings
lara
54
6.4k
BBQ
matthewcrist
88
9.6k
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։ൃ͍ͯ͠·͢ɻ ͥͻͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ͕͋ΕͲΜͲΜཁ͍ͩ͘͞ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠