E2E 테스트

사용자의 실제 사용 흐름을 처음부터 끝까지 시뮬레이션하여 시스템 전체가 올바르게 동작하는지 검증하는 테스트입니다.

테스트 피라미드에서의 위치

        /  E2E 테스트  \        ← 느리고 비용 높음, 적게 작성
       / 통합 테스트     \
      /  단위 테스트       \    ← 빠르고 비용 낮음, 많이 작성

테스트 종류 비교

항목단위 테스트(유닛 테스트(FE))통합 테스트E2E 테스트
범위함수/메서드 단위모듈 간 연동시스템 전체
속도매우 빠름보통느림
비용낮음중간높음
의존성목(Mock) 처리일부 실제 연동실제 환경(DB, API 등)
예시함수 반환값 검증Service + Repository회원가입 → 로그인 → 주문

E2E 테스트 예시 시나리오

[쇼핑몰 주문 플로우]
1. 사용자가 로그인 페이지에 접속
2. 아이디/비밀번호 입력 후 로그인
3. 상품 목록에서 상품 선택
4. 장바구니에 담기
5. 결제 페이지 이동 후 결제 완료
6. 주문 완료 화면 확인

대표 도구

도구대상특징
Selenium웹다양한 언어 지원, 오래된 표준
Cypress웹 (FE 중심)빠른 실행, 직관적 API
Playwright웹크로스 브라우저, Microsoft 지원
Appium모바일iOS/Android 모두 지원
REST AssuredAPI (Java)Java 기반 API 테스트에 특화

Java + Selenium 코드 예시

@Test
void 로그인_후_주문_완료_테스트() {
    WebDriver driver = new ChromeDriver();

    // 1. 로그인
    driver.get("https://example.com/login");
    driver.findElement(By.id("username")).sendKeys("testuser");
    driver.findElement(By.id("password")).sendKeys("password123");
    driver.findElement(By.id("login-btn")).click();

    // 2. 상품 선택 및 장바구니 담기
    driver.findElement(By.className("product-item")).click();
    driver.findElement(By.id("add-to-cart")).click();

    // 3. 결제
    driver.findElement(By.id("checkout-btn")).click();
    driver.findElement(By.id("pay-btn")).click();

    // 4. 주문 완료 확인
    String result = driver.findElement(By.id("order-result")).getText();
    assertEquals("주문이 완료되었습니다.", result);

    driver.quit();
}

장단점

장점단점
실제 사용자 관점에서 검증 가능실행 속도가 느림
시스템 전체의 통합 문제 발견유지보수 비용이 높음
배포 전 치명적 버그 방지테스트 실패 원인 파악이 어려움
비개발자도 시나리오 이해 가능외부 환경에 의한 flaky 테스트 발생

CSLOG에서 보기