프론트엔드/Vue.js

E2E 테스트

코딩사랑꾼 2023. 9. 1. 23:34

E2E Test

E2E(End to End) 테스트란 애플리케이션의 처음부터 끝까지의

실제 사용자의 관점에서 사용 흐름을 테스트하는 방법.

Cypress 테스트 도구를 사용할 수 있습니다.

 

테스트 환경 구성

npm install cypress --save-dev
npm i -D eslint-plugin-cypress

위 명령어를 통해 E2E test관련 프레임과 라이브러리를 설치합니다.

package.json 파일 scripts부분에 cypress를 추가합니다.

.eslintrc.js 파일의 추가부분입니다.

 

cypress.config.js파일에서 viewport의 너비와 높이 그리고 기본 url를 설정해줍니다.

첫 테스트

npm run dev
npm run test:e2e

명령어를 통해 cypress를 열어줍니다. 

create new spec를 선택한 후, 이름 지어주고, run하면 됩니다.

프로젝트 cypress폴더 안에 e2e폴더 생성 후, first_test.cy.js파일이 생성된 것을 확인할 수 있습니다.

경로는 방금 create할 때 작성하는 경로와 같습니다.

 

jest문법와 비슷합니다. 대신 cypress는 it을 사용하며, cy도 사용됩니다.

 

영화 검색 시나리오 테스트

/**
 * 검색(메인) 페이지로 접근한 후,
 * 영화 제목을 'frozen'으로, 표시 개수를 30개로 입력하고,
 * 'Apply' 버튼을 클릭해 영화 목록을 검색합니다.
 * 영화 목록 30개가 잘 출력됩니다.
 * 영화 목록에서 'Frozen II' 영화 아이템을 클릭하면,
 * 영화 상세 정보 페이지로 이동합니다.
 * 상세 정보 페이지에서 정보를 확인할 수 있습니다.
 */

describe('영화 검색(겨울왕국2)', () => {
  it('영화 검색', () => {
    // 검색 페이지로 접근합니다
    cy.visit('/')
    cy.get('header .nav-link.active').contains('Search')

    // 영화를 검색합니다
    cy.get('input.form-control').type('frozen')
    cy.get('select.form-select:nth-child(2)').select('30')
    cy.get('button.btn').contains('Apply').click()
    cy.wait(2000)
    cy.get('.movie').should('have.length', 30)

    // 겨울왕국2 영화 아이템을 선택합니다
    cy.get('.movie .title').contains('Frozen II').click()

    // 영화 상세 정보를 확인합니다
    cy.url().should('include', '/movie/tt4520988')
    cy.wait(1000)
    cy.get('header .nav-link.active').contains('Movie')
    cy.get('.title').contains('Frozen II')
  })
})

it으로 단계별로 테스트를 진행하려고 했는데 잘 안 되더라고요.

그래서 it안에 주석으로 처리했습니다. 

 

it마다 단계별로 진행하려면 2가지 방법이 있습니다.

1. it마다 전 단계 코드를 복붙합니다.

2. .cy.js와 같은 test파일을 각 단계별로 여러 파일을 만든 후, import합니다.

 

Headless테스트 및 동영상 생성

headless모드는 terminal에서만 동작되고 시각적으로 동작되지 않는 모드입니다.

코드 테스트 비교적 빠르는 게 장점입니다.

package.json파일 scripts부분에서 cypress run명령어를 등록합니다.

cypress.config.js 옵션에 video:true를 추가합니다.

terminal에서 headless모드를 실행한 후 cypress폴더 안에 videos폴더 새로 생성됩니다.

클릭해서 확인할 수 있습니다.