E2E Test
e2e 테스트라는 용어를 처음 접하게 되었는데, 나는 해당 용어를 접해본 적이 없어서 맥락 이해에 시간이 걸렸던 경험을 했다.
e2e 테스트란 무엇이고, 어떻게 해야 하는 것일까?
https://fe-developers.kakaoent.com/2023/230209-e2e/
E2E 테스트란
End to end 테스트의 약자이다.
- 브라우저에서 개발한 사이트에 접속하여서
- 특정 아이템을 검색하거나
- 일련의 클릭이나 키보드 타이핑을 수행하기도 하며
- 사용자가 성공적으로 시도하는 시나리오를 완수했는지 테스트한다.
애플리케이션의 흐름을 처음부터 끝까지 테스트 하는 것이라면, 왜 e2e가 필요할까?
- 로직과 기눙 개개별에 대한 테스트는 유닛 테스트로
- 모듈 전체에 대한 테스트는 통합 테스트로 충분하지 않을까?
왜 E2E 테스트가 필요할까
테스트 자동화가 중요하다는 것을 이젠 대다수의 개발자들이 느끼고 있다.
그렇기 때문에 유닛 테스트를 작성하고, 통합 테스트를 작성하는 것은 익숙해지게 되었다.
유닛 테스트와 통합 테스트가 이루려는 바는 아래와 같다.
- 시스템을 구체화한다.
- 버그를 예방하고 이전에 작동하던 기능이 더 이상 작동하지 않는 현상을 방지한다. (software regression)
- 지속적인 통합 (CI)를 수행한다.
게다가 이러한 종류의 테스트는 가능한 만큼 자주 실행되어서 피드백을 제공하고, 개발 중인 시스템이 문제 없다는 것을 보장할 수 있게 한다.
여기에 덧붙여서 E2E 테스트를 수행하는 주된 원동력은, 테스트 스위트를 전체 자동화하는 이점을 얻을 수 있기 때문이다.
그리고 이 이점은 지금까지 설명한 이점 외에도 개발 속도를 빠르게 진전시켜준다.
E2E 테스트는 유닛 테스트와 통합 테스트가 커버하지 못하는 영역까지 커버할 수 있도록 한다.
유닛 테스트와 통합 테스트는 어플리케이션의 작은 부분만 커버하고, 그 부분은 독립적으로 평가된다. 각각의 부분들이 잘 동작할 지라도, 전체가 되었을 때에 어떤 일이 벌어질 지는 모른다.
유닛 테스트와 통합 테스트 위에 E2E 테스트 스위트를 가짐으로써 비로소 전체 어플리케이션에 대해 테스트할 수 있게 되는 것이다.
E2E 테스트의 특징
https://kentcdodds.com/blog/write-tests
위 글에서는 ‘테스트의 피라미드’라는 개념을 언급한다.
- 테스트의 많은 부분은 피라미드의 아래 부분에 속한다.
- 피라미드의 윗 부분으로 올라올 수록, 테스트의 개수는 적어진다.
- 피라미드의 윗 부분으로 올라올 수록, 테스트 수행 속도는 느려지고 테스트를 작성, 실행, 유지하는 비용이 커진다.
그렇기 때문에 E2E 테스트는 필연적으로 유닛 테스트에 비해서는 매우 비싼 테스트이다. 최소 개수의 E2E 테스트를 수행함으로써 비용을 절감하고 테스트의 원래 목적인 ‘개발 속도 향상’을 이루게 해야 한다.