κΉœμ§€

[Cypress Studio] πŸ“ λ”μš± κ°„νŽΈν•΄μ§„ μ›Ή ν…ŒμŠ€νŠΈ μžλ™ν™” 툴

인파_ 2024. 3. 25. 09:33

cypress-studio

Cypress Studio μ†Œκ°œ

μ•žμ„  μ‹œκ°„μ— μžλ°”μŠ€ν¬λ¦½νŠΈμ— μ΅μˆ™ν•˜λ‹€λ©΄ μ‰½κ²Œ μ ‘ν•  수 μžˆλŠ” ν…ŒμŠ€νŠΈ 라이브러리인 cypress 에 λŒ€ν•΄μ„œ 기본적인 μ‚¬μš©λ²•μ„ μ•Œμ•„λ³΄μ•˜λ‹€. 

--------------------------------------------------

링크 λ°•μŠ€

---------------------------------------------------

이처럼 기본적으둜 ν…ŒμŠ€νŒ…μ„ μœ„ν•œ λ™μž‘μ„ 일일히 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ½”λ“œλ₯Ό μ§œμ•Ό ν•˜λŠ”λ°, 그러면 λΉ„μ „κ³΅μžν˜Ήμ€ λΉ„κ°œλ°œ 직ꡰ이 E2E ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° μœ„ν•΄μ„  ν”„λ‘œκ·Έλž˜λ°μ„ λ°°μ›Œμ•Ό ν•˜λŠ” λŸ¬λ‹ μ»€λΈŒκ°€ 있으며, λ˜ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 수만큼 λΉ„μŠ·ν•œ E2E ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό 반볡적으둜 μž‘μ„±ν•΄μ•Ό ν•˜μ—¬ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± μ‹œκ°„μ΄ 였래걸리게 λœλ‹€λŠ” μ•„μ‰¬μš΄μ μ΄ μžˆλ‹€. κ·Έλž˜μ„œ 이λ₯Ό μ’€ 더 νŽΈν•˜κ²Œ ν•˜λŠ” κΈ°λŠ₯이 μžˆμ–΄ μ†Œκ°œν•΄λ³Έλ‹€.

Cypress Studioλž€ Cypressμ—μ„œ μ œκ³΅ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œ μžλ™ν™” κΈ°λŠ₯으둜, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μƒν˜Έμž‘μš©ν•˜λ©΄μ„œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ•Œμ•„μ„œ μƒμ„±ν•΄μ£ΌλŠ” κΈ°λŠ₯이닀. 즉, μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ‚¬μš©μž λ™μž‘ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό κ΅¬μ„±ν•˜λŠ”κ²ƒμ΄ μ•„λ‹Œ, 거꾸둜 μ‚¬μš©μžμ˜ 마우슀, ν‚€λ³΄λ“œ λ“±μ˜ μ•‘μ…˜κ³Ό νŽ˜μ΄μ§€μ˜ λ™μž‘μ„ κΈ°λ‘ν•˜μ—¬ μžλ™μœΌλ‘œ μ½”λ“œλ₯Ό μ™„μ„±μ‹œμΌœ μ€€λ‹€.

예λ₯Όλ“€μ–΄ λ²„νŠΌ 클릭과 같은 λ™μž‘μ— λŒ€ν•œ ν•¨μˆ˜λ₯Ό μ½”λ”© 없이 λ§Œλ“€μ–΄μ£Όλ©°, λ˜ν•œ νŠΉμ • λ²„νŠΌμ— λŒ€ν•œ μ—˜λ¦¬λ¨ΌνŠΈμ˜ μ•„μ΄λ””λ‚˜ 클래슀λ₯Ό 일일히 μΆ”μ ν•΄μ„œ μ•Œν•„μš”μ—†μ΄ 클릭만 ν•˜λ©΄ μžλ™μœΌλ‘œ μ„ νƒμžλ₯Ό 좔적해 λ§Œλ“€μ–΄μ€˜ 훨씬 νŽΈν•΄μ§„λ‹€. κ·Έλž˜μ„œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μˆ˜λ™μœΌλ‘œ μž‘μ„±ν•˜λŠ” μ‹œκ°„κ³Ό λ²ˆκ±°λ‘œμ›€μ„ 쀄일 수 μžˆμ–΄, Cypressλ₯Ό μƒˆλ‘œ μ‚¬μš©ν•˜κ±°λ‚˜ ν•™μŠ΅ν•˜λŠ” μ‚¬λžŒλ“€μ—κ²Œ μœ μš©ν•˜κ³  λΉ λ₯΄κ²Œ ν…ŒμŠ€νŠΈλ₯Ό λ§Œλ“€ 수 있게 λ˜μ–΄ 업무 효율일 높일 수 μžˆλ‹€.

λ‹€λ§Œ Cypress StudioλŠ” 아직 μ‹€ν—˜μ μΈ κΈ°λŠ₯이라 μ™„μ„±ν˜• λ„κ΅¬λŠ” μ•„λ‹˜μ„ μœ μ˜ν•˜μž. 예λ₯Όλ“€μ–΄ Cypress StudioλŠ” ν˜„μž¬ E2E ν…ŒμŠ€νŠΈ μž‘μ„±μ—λ§Œ μ‚¬μš©ν•  수 있으며, μ—¬λŸ¬ 좜처의 도메인을 μ‚¬μš©ν•˜λŠ” μž‘μ„± ν…ŒμŠ€νŠΈλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

Cypress Studio μ‚¬μš©λ²•

 

Cypress μ„€μΉ˜ν•˜κΈ°

κΈ°μ‘΄ cypressλ₯Ό μ„€μΉ˜ν•˜μ—¬ μ‚¬μš©ν•˜κ³  μžˆλŠ” λ…μžλΆ„λ“€μ΄λΌλ©΄, 이 λ‹¨κ³„λŠ” κ·Έλƒ₯ κ±΄λ„ˆλ›°μ–΄λ„ λœλ‹€. ν•˜μ§€λ§Œ cypressλ₯Ό 처음 μ ‘ν•˜μ‹œλŠ” 뢄듀은 https://www.cypress.io/install λ§ν¬μ—μ„œ [Download Cypress.zip] λ²„νŠΌμ„ 눌러 exe νŒŒμΌμ„ λ‹€μš΄λ°›μž.

cypress-studio

그리고 μ••μΆ• νŒŒμΌμ„ μ μ ˆν•œκ³³μ— 압좕을 ν’€κ³  경둜의 νŒŒμΌμ„ μ‹€ν–‰ν•˜λ©΄, λŸ°μΉ˜νŒ¨λ“œ(Launchpad) 화면이 λ„μ›Œμ§€κ²Œ λœλ‹€.

cypress-studio
cypress-studio


Cypress Studio μ„€μ •ν•˜κΈ°

 

초기 ν”„λ‘œμ νŠΈ 폴더 생성

λ¨Όμ € 쀑앙에 Drag your project directory here or browse manually 문ꡬ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό 관리할 ν”„λ‘œμ νŠΈ 폴더λ₯Ό 선택해쀀닀. 처음이라면 빈 폴더λ₯Ό μƒμ„±ν•˜κ³  등둝해 μ£Όλ©΄ λœλ‹€.

cypress-studio

ν”„λ‘œμ νŠΈ 폴더λ₯Ό λ“±λ‘ν•˜λ©΄, μ•„λž˜μ™€ 같은 ν™”λ©΄μœΌλ‘œ λ„˜μ–΄κ°€κ²Œ 되고 사진에 따라 진행해쀀닀.

cypress-studio
cypress-studio
cypress-studio

 

ν…ŒμŠ€νŠΈ 파일 생성

λΈŒλΌμš°μ €λ₯Ό μ„ νƒν•˜λ©΄, 마치 μ›Ήμ•±κ³Ό 같이 cypress μ „μš© μ›Ήμ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μƒˆ 창으둜 μ—΄λ¦¬κ²Œ λœλ‹€. μƒˆ ν…ŒμŠ€νŠΈ νŒŒμΌμ„ μƒμ„±ν•˜λ„λ‘ ν•˜μž.

cypress-studio
cypress-studio
ν…ŒμŠ€νŠΈ μ½”λ“œ 파일 생성
cypress-studio
μƒμ„±λœ ν…ŒμŠ€νŠΈ μ½”λ“œ 파일 μ‹€ν–‰
cypress-studio

 

Studio μ„€μ • ν™œμ„±ν™” ν•˜κΈ°

μ‚¬μš©μžμ˜ ν‚€λ³΄λ“œ, 마우슀 클릭과 같은 μ—¬λŸ¬ λ™μž‘μ„ κΈ°λ‘ν•˜μ—¬ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„ΈνŒ…μ—μ„œ μ„€μ •κ°’ ν•˜λ‚˜κ°€ ν•„μš”ν•˜λ‹€.

λ¨Όμ € μ„ΈνŒ…μ„ 눌러 νŒŒμΌμ„ μ—΄μ–΄ νŽΈμ§‘ν•  에디터λ₯Ό 지정해주고, cypress.config.js νŒŒμΌμ„ μ—΄μ–΄μ„œ μ•ˆμ— experimentalStudio: trueλ₯Ό μ•„λž˜μ™€ 같이 μΆ”κ°€ν•΄μ€€λ‹€.

cypress-studio
cypress-studio
cypress-studio

module.exports = {
  e2e: {
    // μžλ™ ν…ŒμŠ€νŠΈ μ½”λ“œ 생성 μ„€μ •
    experimentalStudio: true,

    setupNodeEvents(on, config) {
      // implement node event listeners here
    },
  },
};

μ½”λ“œλ₯Ό μ €μž₯ν•˜λ©΄, cypress studio 크둬 웹앱이 μž¬λΆ€νŒ…λ˜κ²Œ 되고, 상단에 'μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μ†Œν”„νŠΈμ›¨μ–΄μ— μ˜ν•΄ μ œμ–΄λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€'라고 ν‘œκΈ°κ°€ 되며, λ‹€μ‹œ μ„ΈνŒ…μœΌλ‘œ λ“€μ–΄κ°€μ„œ Project settings λ₯Ό ν΄λ¦­ν•˜κ³  μŠ€ν¬λ‘€μ„ 내리면 μ•„λž˜μ™€ 같이 μ˜΅μ…˜μ΄ ν™œμ„±ν™”κ°€ 된 것을 확인할 수 μžˆλ‹€.

cypress-studio


Cypress Studio μ‹œμž‘ν•˜κΈ°

ν…ŒμŠ€νŠΈ λ™μž‘ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ €λ©΄ μœ„μ—μ„œ μƒμ„±ν•œ spec.cy.js νŒŒμΌμ„ μˆ˜μ •ν•˜λ©΄ λœλ‹€. λ‹€λ§Œ μš°λ¦¬λŠ” μ‚¬μš©μžμ˜ λ™μž‘μ„ κΈ°λ‘ν•΄μ„œ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μƒμ„±ν•˜λŠ” κΈ°λŠ₯을 ν•˜μš©ν•  것이기 λ•Œλ¬Έμ—, μ›Ήμ•±μ—μ„œ cypress studioλ₯Ό μ§„ν–‰ν•˜λ„λ‘ ν•΄λ³΄μž.

 

μžλ™ ν…ŒμŠ€νŠΈ 기둝 & 생성

λ¨Όμ € 기둝을 μ‹œμž‘ν•˜κΈ° μœ„ν•΄μ„  μ•„λž˜μ™€ 같이 template spec ν…ŒμŠ€νŠΈ 문ꡬ μ˜†μ— 마우슀 μ»€μ„œλ₯Ό 살짝 올렀보면 μ˜†μ— λ§ν’μ„ μœΌλ‘œ Add New Test 문ꡬ가 λœ¨λ©΄μ„œ 클릭이 ν™œμ„±ν™” λœλ‹€.

cypress-studio

그러면 ν…ŒμŠ€νŠΈν•  μ›ΉνŽ˜μ΄μ§€λ₯Ό μž…λ ₯ν•˜λΌκ³  뜨게되고 여기에 κ΅­λ‚΄ 보편적인 μ‚¬μ΄νŠΈλ₯Έ 넀이버 www.naver.com  μ„ μž…λ ₯ν•΄λ³΄μž.

cypress-studio

Continue λ²„νŠΌμ„ λˆ„λ₯΄κ²Œ 되면 넀이버 μ›ΉνŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜κ²Œ λ˜λŠ”λ°, 이제 이 μ›ΉνŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©μžκ°€ ν–‰μœ„, λ™μž‘μ„ ν•˜κ²Œλ˜λ©΄ 이에 맞게 μ™Όμͺ½ 둜그 메뉴에 기둝이 되게 λœλ‹€.

cypress-studio

예λ₯Όλ“€μ–΄ 넀이버 검색창에 ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•˜κ³  우츑의 돋보기 λ²„νŠΌμ„ ν΄λ¦­ν•˜λŠ” λ™μž‘μ„ ν–‰ν•˜λ©΄, μ’ŒμΈ‘μ— 이에 λŒ€ν•œ ν–‰μœ„κ°’μ΄ 기둝되게 되며, Save Commands λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ 이λ₯Ό μ½”λ“œλ‘œ λ³€ν™˜ν•˜κ²Œ λœλ‹€.

cypress-studio
cypress-studio
cypress-studio
ν…ŒμŠ€νŠΈ 이름 μž…λ ₯

μ‹€μ œ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μœ„μ—μ„œ μƒμ„±ν•˜κ³  μ‹€ν–‰ν•œ spec.cy.js νŒŒμΌμ„ μ˜€ν”ˆν•˜λ©΄ μ•„λž˜μ™€ 같이 μ‚¬μš©μžμ˜ ν–‰μœ„κ°€ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ‘œ λ³€ν™˜λœ 것을 확인할 수 μžˆλ‹€.

// template specμ΄λΌλŠ” ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
describe('template spec', () => {

  /* ==== Test Created with Cypress Studio ==== */
  
  // λ„€μ΄λ²„λΌλŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  it('넀이버', function() {
    /* ==== Generated with Cypress Studio ==== */
    cy.visit('www.naver.com'); // www.naver.com λΌλŠ” μ›Ήμ‚¬μ΄νŠΈλ₯Ό λ°©λ¬Έν•©λ‹ˆλ‹€.
    cy.get('#query').clear('r'); // idκ°€ query인 μš”μ†Œλ₯Ό μ°Ύμ•„μ„œ rμ΄λΌλŠ” 문자λ₯Ό μ§€μ›λ‹ˆλ‹€.
    cy.get('#query').type('검색어λ₯Ό μž…λ ₯ν•˜μ„Έμš”'); // idκ°€ query인 μš”μ†Œμ— '검색어λ₯Ό μž…λ ₯ν•˜μ„Έμš”'라고 νƒ€μ΄ν•‘ν•©λ‹ˆλ‹€.
    cy.get('#search-btn').click();  // idκ°€ search-btn인 μš”μ†Œλ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.
    /* ==== End Cypress Studio ==== */
  });
})

μ΄λ ‡κ²Œ μƒμ„±λœ ν…ŒμŠ€νŠΈ μ½”λ“œ νŒŒμΌμ„ μ‹€ν–‰μ‹œν‚€λ €λ©΄, GUI μ•±μ—μ„œ 직접 νŒŒμΌμ„ ν΄λ¦­ν•˜λ©΄ μžλ™μœΌλ‘œ μ§„ν–‰λ˜κ²Œ λœλ‹€.

 

ν…ŒμŠ€νŠΈ λͺ…λ Ή μ΄μ–΄μ„œ μΆ”κ°€ν•˜κΈ°

만일 좔가적인 ν…ŒμŠ€νŒ… λ™μž‘ μ½”λ“œκ°€ ν•„μš”ν•˜λ‹€λΌκ³  ν•œλ‹€λ©΄, μ•„λž˜ μ‚¬μ§„μ²˜λŸΌ ν…ŒμŠ€νŠΈ 그룹에 마우슀 μ»€μ„œλ₯Ό κ°–λ‹€λŒ€λ©΄, 'Add Commands to Test' 말좩선이 뜨게 λœλ‹€. 이걸 ν΄λ¦­ν•˜λ©΄ λ‹€μ‹œ Cypress Studio κ°€ λ°œλ™λ˜λ©° λ™μž‘ μ½”λ“œ λ³€ν™˜μ„ μ‹œν–‰ν•˜κ²Œ λœλ‹€. μΆ”κ°€ μˆ˜μ •μ„ ν•œλ’€ 이전 처럼 μ»€λ§¨λ“œλ₯Ό μ €μž₯ν•΄μ£Όλ©΄ λœλ‹€.

cypress-studio

 

μ—˜λ¦¬λ¨ΌνŠΈ κ°’ μΆ”μ ν•˜κΈ°

λ‚΄κ°€ ν΄λ¦­ν•œ λ©”λ‰΄λ‚˜ λ²„νŠΌμ˜ css μ„ νƒμžλ₯Ό μ•Œκ³  싢을 λ•Œκ°€ μžˆμ„ 것이닀. 이런 경우 개발자 도ꡬλ₯Ό μ—΄μ–΄ 일일히 μΆ”μ ν•˜κΈ° λ³΄λ‹€λŠ” cypressμ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” κΈ°λŠ₯을 μ΄μš©ν•˜λ©΄ λœλ‹€. μ•„λž˜μ™€ 같이 κ°„νŽΈνžˆ μ…€λ ‰ν„°λ₯Ό 얻을 수 μžˆλ‹€.

cypress-studio


μ°Έκ³ λ¬Έν—Œ

https://docs.cypress.io/guides/references/cypress-studio

ν…ŒμŠ€νŠΈ μ½”λ“œ μžλ™μœΌλ‘œ λ§Œλ“€κΈ° feat. Cypress Studio | μΉ΄μΉ΄μ˜€μ—”ν„°ν…ŒμΈλ¨ΌνŠΈ FE κΈ°μˆ λΈ”λ‘œκ·Έ