$30 off During Our Annual Pro Sale. View Details »

E2E testing on Rails 2023

Yusuke Iwaki
October 27, 2023

E2E testing on Rails 2023

Kaigi on Rails 2023 発表スライド

Yusuke Iwaki

October 27, 2023
Tweet

More Decks by Yusuke Iwaki

Other Decks in Technology

Transcript

  1. &&UFTUJOHPO3BJMT
    !:VTVLF*XBLJ,BJHJPO3BJMT

    View Slide

  2. &&UFTUJOHPO3BJMT
    ຊ೔ͷ͓୊

    View Slide

  3. &OEUP&OEUFTUJOH
    ɾ3BJMT͔ΒγεςϜςετ͕࢖͑Δ
    ɾ$BQZCBSB4FMFOJVNͰॻ͘ϒϥ΢βςετ
    ˠ͓ੈࣙʹ΋։ൃମݧ͕ྑ͍ͱ͸ݴ͑ͳ͍ɻ
    ͋ʔɺ͜ΕམͪΔςετͳɻ
    ϦτϥΠɹΆͪͬ

    View Slide

  4. γεςϜςετղ๤ֶ
    ͳͥςετ͕ෆ҆ఆʹͳΔͷ͔ɺͲ͏ରॲ͢Ε͹Α͍ͷ͔Λߟ࡯ͨ͠ɻ
    IUUQTLBJHJPOSBJMTPSHUBMLT:VTVLF*XBLJ

    View Slide

  5. ੈͷதͷྲྀΕ͸/PEFKTʹ
    IUUQTTUBSIJTUPSZDPNUFBNDBQZCBSBDBQZCBSBDZQSFTTJPDZQSFTTNJDSPTPGUQMBZXSJHIU%BUF
    /PEFKTϕʔεͷςετϥϯφʔΛओ࣠ͱͯ͠
    3BJMTͱͲͷΑ͏ʹڠௐ͍͔ͤͯ͘͞ʁΛߟ͑Δɻ

    View Slide

  6. ຊ೔࿩͢͜ͱɾ࿩͞ͳ͍͜ͱ
    w࿩͢͜ͱ
    w3BJMTͷγεςϜςετͷಈ͖
    wطଘͷ࢓૊Έ
    wDZQSFTTPOSBJMT DZQSFTTSBJMT
    w/PEFKTϕʔεͷςετϥϯφʔͱڠௐͤ͞ΔͨΊʹɺ3BJMT͕Ͱ͖Δ͜ͱ
    w࿩͞ͳ͍͜ͱ
    w̋̋ϥΠϒϥϦ࢖͏ͱ͍͍Αʙ
    wෆ҆ఆͳςετΛͳ͘͢ʹ͸˚˚ͨ͠΄͏͕͍͍Αʙ

    View Slide

  7. 3BJMTͷγεςϜςετ͓͞Β͍

    View Slide

  8. 3BJMTͷγεςϜςετ
    3BJMTىಈˠϒϥ΢βىಈˠࣗಈૢ࡞

    View Slide

  9. 34QFD
    ͜ͷஈ֊Ͱ͸
    3BJMTαʔόʔ΋
    ϒϥ΢β΋ىಈ͍ͯ͠ͳ͍

    View Slide

  10. 34QFD
    ॳΊͯ$BQZCBSB%4-Λ࢖͏৔ॴ
    3BJMTαʔόʔىಈ
    ϒϥ΢βىಈ

    View Slide

  11. ,BJHJPO3BJMTγεςϜςετղ๤ֶɹͷεϥΠυ͔Βൈਮ
    3BJMTαʔόʔىಈ

    View Slide

  12. $BQZCBSBTFMFOJVNESJWFS
    DBQZCBSBQMBZXSJHIUESJWFS
    ϒϥ΢βىಈ

    View Slide

  13. MPDBMIPTUMPHJO
    $BQZCBSB
    #SPXTFS υϥΠό
    $BQZCBSB
    4FTTJPO
    WJTJU
    WJTJU
    WJTJU
    υϥΠόͷ
    ࣮૷ʹΑΔ
    (&5MPHJO
    MPDBMIPTUMPHJO
    -PHJO

    View Slide

  14. MPDBMIPTUMPHJO
    $BQZCBSB
    #SPXTFS
    υϥΠό
    $BQZCBSB
    4FTTJPO
    pMM@JO pMM@JO
    pOE
    TFU
    -PHJO
    MPDBMIPTUMPHJO
    -PHJO
    JOQVU
    :VTVLF*XBLJ

    View Slide

  15. MPDBMIPTUMPHJO
    $BQZCBSB υϥΠό
    pMM@JO
    pOE
    TFU
    -PHJO
    JOQVU
    MPDBMIPTUMPHJO
    -PHJO
    :VTVLF*XBLJ

    View Slide

  16. MPDBMIPTUMPHJO
    υϥΠό
    pOE
    DMJDL -PHJO
    CVUUPO
    MPDBMIPTUMPHJO
    MPDBMIPTUMPHJO
    -PHJO
    :VTVLF*XBLJ

    $BQZCBSB
    DMJDL@CVUUPO

    View Slide

  17. MPDBMIPTUTFTTJPOT
    MPDBMIPTUEBTICPBSE
    MPDBMIPTUEBTICPBSE
    -PHJO
    1045TFTTJPOT
    (&5EBTICPBSE

    $BQZCBSB υϥΠό
    HPUP
    WJTJU
    ϩάΠϯ׬ྃΛ଴ͨͣʹ࣍ʹਐΉ
    ͓ͬͱɾɾɾ

    View Slide

  18. $BQZCBSB υϥΠό
    IBWF@UFYU pOE@YQBUI MPDBMIPTUEBTICPBSE
    %"4)#0"3%

    View Slide

  19. 34QFD
    3FQPSU
    $POTPMF
    "MMVSFSFQPSU

    View Slide

  20. 1MBZXSJHIUςετϥϯφʔ
    w OQYDSFBUFQMBZXSJHIU OQNJOJUQMBZXSJHIU
    Ͱ؀ڥߏங
    w QMBZXSJHIUDPO
    fi
    HUTͰ8FCαʔόʔ΍ςετϒϥ΢β؀ڥΛهड़
    w 1Z5FTUͬΆ͍
    fi
    YUVSFTΛར༻ͨ͠ςετσʔλੜ੒

    View Slide

  21. QMBZXSJHIUDPO
    fi
    HUT
    w QSPKFDUTͰ؀ڥهड़
    w $ISPNJVN 'JSFGPY 8FC,JUʹɹ
    ΑΔςετ
    w XFC4FSWFSͰςεταʔόʔهड़
    w ෳ਺αʔόʔىಈ΋Մೳ

    View Slide

  22. ςεταʔόʔىಈ

    View Slide

  23. ϒϥ΢βىಈ

    View Slide

  24. ࣗಈૢ࡞
    :VTVLF*XBLJ
    ͳΜͯ஌Βͳ͍Αʁ

    View Slide

  25. MPDBMIPTUMPHJO
    -PHJO
    :VTVLF*XBLJ
    ਖ਼͍͠৘ใΛೖྗ͍ͯͩ͘͠͞

    View Slide

  26. 3FQPSU
    -JOF
    "MMVSFSFQPSU
    )UNM
    ;JQ

    View Slide

  27. 1MBZXSJHIUςετϥϯφʔ
    w OQYDSFBUFQMBZXSJHIU OQNJOJUQMBZXSJHIU
    Ͱ؀ڥߏங
    w QMBZXSJHIUDPO
    fi
    HUTͰ8FCαʔόʔ΍ςετϒϥ΢β؀ڥΛهड़
    w 1Z5FTUͬΆ͍
    fi
    YUVSFTΛར༻ͨ͠ςετσʔλੜ੒

    View Slide

  28. 1Z5FTUͷ'JYUVSFT

    View Slide

  29. 1Z5FTUͷ'JYUVSFT
    ґଘ͢ΔϑΟΫενϟΛݺͼग़͠
    ґଘ͢ΔϑΟΫενϟΛݺͼग़͠
    ґଘ͢ΔϑΟΫενϟΛݺͼग़͠

    View Slide

  30. 1Z5FTUͷ'JYUVSFT
    ϑΟΫενϟͷޙॲཧ΋ॻ͚Δ
    34QFDͩͱ
    #&(*/30--#"$,
    Ͱશ෦ϩʔϧόοΫ͢Δͷ͕ৗ

    View Slide

  31. 1MBZXSJHIUͷ
    fi
    YUVSFT
    ґଘ͢ΔϑΟΫενϟΛݺͼग़͠

    View Slide

  32. ͦ͏͸͍ͬͯ΋
    ϑΝΫτϦͱϞοΫ͸࢖͍͍ͨʜ
    ຊ౰ʹ'JSFCBTFϓογϡΛૹΔΘ͚ʹ͸͍͔ͳ͍
    'BDUPSZ#PUͷఆٛ͸࠶ར༻͍ͨ͠

    View Slide

  33. طଘϥΠϒϥϦ͕
    ͲΜͳ޻෉͍ͯ͠Δ͔ݟͯΈΔ

    View Slide

  34. طଘϥΠϒϥϦ
    w DZQSFTTSBJMT
    w DZQSFTTPOSBJMT

    View Slide

  35. DZQSFTTSBJMT
    w 1VNBςεταʔόʔ$ZQSFTTηοτͷಠࣗςετ؀ڥΛཱͯΔ
    w SBLFDZQSFTTYYYͱ͍͏DZQSFTTϥοϓίϚϯυ͕༻ҙ͞Ε͍ͯΔɻ
    w σϑΥϧτͰ͸3"*-4@&/7UFTUͰαʔόʔىಈ
    w 1VNBαʔόʔىಈ෦෼͸ɺ$BQZCBSBͷίʔυͷίϐʔ࣮૷
    w 5SBOTBDUJPOBM5FTUΛߦ͏ɻ%#ίωΫγϣϯڞ༗ʢMPDL@UISFBEʣ͸ɹɹ
    ΄ͱΜͲ"DUJWF3FDPSEͷίʔυͷίϐʔ࣮૷

    View Slide

  36. 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͢Δ

    View Slide

  37. DZQSFTTPOSBJMT
    w ͋ͳͨͷ3BJMTΞϓϦέʔγϣϯΛɺ$ZQSFTT΍1MBZXSJHIUͱର޲ͤ͞ΔͨΊͷ
    ςεταʔόʔʹ͢Δ͚ͩ
    w 3BJMTαʔόʔ͸खͰىಈ͢Δɻ
    w 3BJMTଆʹίϯτϩʔϧ༻ͷΤϯυϙΠϯτΛੜ΍͚ͩ͢
    w 'BDUPSZ#PUΛݺͼग़͢ΤϯυϙΠϯτGBDUPSZ@CPU
    w ೚ҙͷ3BJMTίʔυΛ࣮ߦͰ͖ΔΤϯυϙΠϯτFWBM
    w %BUBCBTF$MFBOFSΛ࢖ͬͯɺςετσʔλΛ࡟আ͢ΔΤϯυϙΠϯτDMFBO

    View Slide

  38. DZQSFTTPOSBJMT
    ಠࣗϛυϧ΢ΣΞ
    $:13&44CJOSBJMTTFSWFS
    (&5@@FF@@DPNNBOE
    ϧʔτఆٛ
    ɾFactoryBot ݺͼग़͠
    ɾ೚ҙͷίϚϯυ࣮ߦ
    ɾσʔλ clean
    ςετπʔϧ͸/PEFKTͷ΋ͷΛͦͷ··࢖͏
    ඞཁͳλΠϛϯάͰ
    )551ΞΫηεͯ͠ݺͼग़͠

    View Slide

  39. ͦ͏͸͍ͬͯ΋
    ϑΝΫτϦͱϞοΫ͸࢖͍͍ͨʜ
    ຊ౰ʹ'JSFCBTFϓογϡΛૹΔΘ͚ʹ͸͍͔ͳ͍
    'BDUPSZ#PUͷఆٛ͸࠶ར༻͍ͨ͠

    View Slide

  40. ϞοΫελϒ
    w 34QFDͩͱಛఆͷςετͷ͚ؒͩϝιουͷڍಈΛม͑Δ͜ͱ͸Ͱ͖Δ
    w BMMPX@BOZ@JOTUBODF@PGʜ 3F
    fi
    OFNFOUT ͳͲ
    w (&5IPHF͞Ε͔ͯΒ(&5GVHB͞ΕΔ·ͰϞοΫ͸Ͳ͏͢Δɾɾɾʁ
    w ຊ౰ʹͳ͍ͳΒࣗ෼Ͱ࡞Δ͔͠ͳ͍ʜ

    View Slide

  41. 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

    View Slide

  42. 1MBZXSJHIUͷ
    fi
    YUVSFTͰϞοΫΛ࣮ݱ
    ಠࣗϛυϧ΢ΣΞ
    ςετલ४උ VTFSΛ̍ਓ࡞੒

    ςετલ४උ DVSSFOU@VTFSΛϞοΫ

    ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ

    +PIO

    View Slide

  43. 1MBZXSJHIUͷ
    fi
    YUVSFTͰϞοΫΛ࣮ݱ
    ಠࣗϛυϧ΢ΣΞ
    ςετલ४උ VTFSΛ̍ਓ࡞੒

    ςετલ४උ DVSSFOU@VTFSΛϞοΫ

    ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ

    +PIO
    $VSSFOUVTFS

    View Slide

  44. 1MBZXSJHIUͷ
    fi
    YUVSFTͰϞοΫΛ࣮ݱ
    ಠࣗϛυϧ΢ΣΞ
    ςετલ४උ VTFSΛ̍ਓ࡞੒

    ςετલ४උ DVSSFOU@VTFSΛϞοΫ

    ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ

    +PIO
    $VSSFOUVTFS
    +PIO

    View Slide

  45. 1MBZXSJHIUͷ
    fi
    YUVSFTͰϞοΫΛ࣮ݱ
    ಠࣗϛυϧ΢ΣΞ
    ςετલ४උ VTFSΛ̍ਓ࡞੒

    ςετલ४උ DVSSFOU@VTFSΛϞοΫ

    ςετޙॲཧ DVSSFOU@VTFSϞοΫղআ

    +PIO

    View Slide

  46. 3BJMTΒ͘͠ɺϞοΫ΍ϑΝΫτϦΛ׆༻ͭͭ͠
    /PEFKTϕʔεͷϥϯφʔͰςετͰ͖ͨʂʂ
    ʘ ?P?
    ʗ

    View Slide

  47. ʂ

    View Slide

  48. ʂ
    ಠࣗϛυϧ΢ΣΞ
    +PIOΛ࡞੒ͯ͠
    $VSSFOUVTFSʹ
    *%:VTVLF*XBLJ
    1BTT
    ͰϩάΠϯ
    %BTICPBSETQFD
    -PHJOTQFD
    +PIO
    $VSSFOUVTFS

    View Slide

  49. ʂ
    ಠࣗϛυϧ΢ΣΞ
    +PIOΛ࡞੒ͯ͠
    $VSSFOUVTFSʹ
    *%:VTVLF*XBLJ
    1BTT
    ͰϩάΠϯ
    %BTICPBSETQFD
    -PHJOTQFD
    +PIO
    $VSSFOUVTFS
    /PEFKTϕʔεͷςετϥϯφʔ͸
    ϊϯϒϩοΩϯά*0ϑϧ׆༻
    جຊతʹ͸ฒྻςετʂ

    View Slide

  50. ʂ
    ಠࣗϛυϧ΢ΣΞ
    +PIOΛ࡞੒ͯ͠
    $VSSFOUVTFSʹ
    *%:VTVLF*XBLJ
    1BTT
    ͰϩάΠϯ
    %BTICPBSETQFD
    -PHJOTQFD
    +PIO
    $VSSFOUVTFS
    $BQZCBSBͷͱ͖ʹฒྻ࣮ߦͳΜͯ
    ҙࣝͯ͠ॻ͍ͯͳ͔ͬͨʜPS[

    View Slide

  51. ςετϫʔΧʔ͝ͱʹର޲αʔόʔΛม͍͑ͨ
    %BTICPBSETQFD
    -PHJOTQFD
    ಠࣗϛυϧ΢ΣΞ
    %#
    ಠࣗϛυϧ΢ΣΞ
    %#
    +PIO
    $VSSFOUVTFS
    :VTVLF*XBLJ

    View Slide

  52. ςετϫʔΧʔ͝ͱʹର޲αʔόʔΛม͍͑ͨ
    %BTICPBSETQFD
    -PHJOTQFD
    ಠࣗϛυϧ΢ΣΞ
    %#
    ಠࣗϛυϧ΢ΣΞ
    %#
    +PIO
    $VSSFOUVTFS
    :VTVLF*XBLJ

    View Slide

  53. 4IBSEJOHͰແཧ΍ΓฒྻԽʜ
    %BTICPBSETQFD
    -PHJOTQFD
    ಠࣗϛυϧ΢ΣΞ
    %#
    ಠࣗϛυϧ΢ΣΞ
    %#
    +PIO
    $VSSFOUVTFS
    :VTVLF*XBLJ
    OQYQMBZXSJHIUUFTU
    ŠTIBSEŠSFQPSUFSCMPC
    OQYQMBZXSJHIUUFTU
    ŠTIBSEŠSFQPSUFSCMPC
    1035

    1035

    View Slide

  54. 4IBSEJOHͰແཧ΍ΓฒྻԽʜ
    %BTICPBSETQFD
    -PHJOTQFD
    ಠࣗϛυϧ΢ΣΞ
    %#
    ಠࣗϛυϧ΢ΣΞ
    %#
    +PIO
    $VSSFOUVTFS
    :VTVLF*XBLJ
    OQYQMBZXSJHIUUFTU
    ŠTIBSEŠSFQPSUFSCMPC
    OQYQMBZXSJHIUUFTU
    ŠTIBSEŠSFQPSUFSCMPC
    QPSU

    QPSU

    ίϨδϟφΠײ
    ฒྻςετ͸ըظత͕ͩɺզʑʹ͸·ͩ଎͗͢Δɻ

    View Slide

  55. ·ͣ͸௚ྻςετ͔Β࢝ΊΑ͏

    View Slide

  56. ·ͱΊ&OEUP&OEUFTUJOHPO3BJMT
    ɾ3BJMTΞϓϦέʔγϣϯΛ/PEFKTϕʔεͷςετϥϯφʔ
    Ͱ3BJMTͬΆ͍΍Γ͔ͨͰγεςϜςετ͢Δํ๏Λߟ࡯ͨ͠
    ɾ3BDLϛυϧ΢ΣΞͰɺίϯτϩʔϧ༻ΤϯυϙΠϯτΛ༻
    ҙ͢Δ͚ͩͰɺ1MBZXSJHIUςετϥϯφʔͷ։ൃମݧͷྑ͞
    Λڗड͢Δ͜ͱ͸Ͱ͖ͨɻ
    ɾͨͩ͠ฒྻςετ͸·ͩզʑʹ͸ૣ͔ͬͨʜɻ௚ྻςετ
    ͔Β࢝ΊͯΈΑ͏ɻ

    View Slide

  57. એ఻1MBZXSJHIUΛ3VCZ͔Β࢖͑Δ044
    ɾͦ͏͸͍ͬͯ΋ɺ$BQZCBSBͰ1MBZXSJHIU࢖͍͍ͨΑͶX
    w 1MBZXSJHIUΛ3VCZ͔Β࢖͑ΔΑ͏(FN։ൃ͍ͯ͠·͢ɻ
    ͥͻ࢖ͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ఺͕͋Ε͹ͲΜͲΜཁ๬͍ͩ͘͞ʂ

    View Slide

  58. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide