개요
안녕하세요 빈코입니다. 오늘은 저번 포스팅인 Unit 테스트와 Integration 테스트 정리에 이어서 테스트의 마지막 종착지인 E2E테스트에 대해 포스팅하려고 합니다. E2E 테스트는 End-to-End 테스트로 애플리케이션의 흐름을 처음부터 끝까지 테스트하는 것을 말합니다. 그럼 하단에서 자세히 살펴볼까요?
E2E 테스트?📙
E2E(End-to-End) 테스트는 개요에서 설명했듯이, 소프트웨어 시스템의 전체적인 기능과 성능을 검증하는 테스트 방법론입니다. 사용자가 실제로 시스템을 사용할 때와 유사한 환경에서 시스템이 예상대로 작동하는지 확인하기 위해 사용되며, 소프트웨어의 모든 구성 요소를 포함하여 전체적인 시나리오를 실행하고 결과를 검증합니다.
쉽게 말해서, A개발자가 개발한 소프트웨어를 각 회사의 품질관리팀(QC) 팀원분들이 해당 소스를 배포하기 전에 여러 가지 테스트를 진행해 주시는데, 이런 부분들을 자동화한다고 생각하시면 됩니다.
간단한 예시로, 온라인 쇼핑몰이 있다고 가정했을 때 사용자는 웹사이트에 접속하여 로그인 페이지로 이동 후, 자신의 아이디와 비밀번호를 입력하여 로그인을 시도합니다. 시스템상으로는 사용자의 인증 정보를 검증하고, 올바른 경우 사용자를 로그인 상태로 전환합니다.
이후에, 사용자가 원하는 제품을 검색하고 선택 후 주문 및 결제를 시도합니다. 이러한 일련의 모든 과정들을 테스트하는 것을 E2E 테스트라고 합니다. 하지만, 실제 운영되는 사이트에서는 정말 많은 테스트 케이스가 존재합니다. 예를 들어, 비밀번호를 잘못 입력했을 경우의 테스트, 주문량이 재고량보다 초과했을 때의 테스트, 결제 실패했을 때의 테스트, 대용량 테스트 등 케이스는 많지만 블로그 포스팅 상 제약되므로 하단에서의 예시 코드는 간단한 E2E 테스트만 진행할 예정입니다😃
코드 예시📘
public class BincoShoppingTest {
private WebDriver driver;
@Before
public void setUp() {
// WebDriver 초기화
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
driver = new ChromeDriver();
driver.manage().window().maximize();
}
@Test
public void testBincoShopping() {
// 웹사이트 접속
driver.get("http://bincoShop.com/");
// 로그인
WebElement usernameInput = driver.findElement(By.id("username"));
WebElement passwordInput = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("loginButton"));
usernameInput.sendKeys("exampleuser");
passwordInput.sendKeys("password123");
loginButton.click();
// 로그인 확인
assertTrue(driver.getCurrentUrl().equals("http://bincoShop.com/dashboard"));
// 제품 검색
WebElement searchInput = driver.findElement(By.id("searchInput"));
WebElement searchButton = driver.findElement(By.id("searchButton"));
searchInput.sendKeys("example product");
searchButton.click();
// 검색 결과 확인
WebElement productLink = driver.findElement(By.linkText("Example Product"));
productLink.click();
// 제품 상세 페이지 확인
assertTrue(driver.getCurrentUrl().equals("http://BincoShop.com/products/123"));
// 제품 주문
WebElement addToCartButton = driver.findElement(By.id("addToCartButton"));
addToCartButton.click();
WebElement checkoutButton = driver.findElement(By.id("checkoutButton"));
checkoutButton.click();
// 주문 확인
WebElement orderConfirmationMessage = driver.findElement(By.id("orderConfirmationMessage"));
assertTrue(orderConfirmationMessage.isDisplayed());
}
@After
public void tearDown() {
// WebDriver 종료
if (driver != null) {
driver.quit();
}
}
}
흐름이 눈에 보이시나요? 해당 테스트를 실행 시 로그인부터 제품 구매까지 전반적인 테스트를 수행합니다. 이렇게 테스트를 진행하다 보면 특정 부분의 소스를 고쳤을 때 발생할 수 있는 사이드 이펙트도 한눈에 볼 수 있고, 반복적으로 수동 테스트했던 기능 테스트들을 배포 전에 한번에 테스트하여 시간을 많이 아낄 수 있습니다. 다만, 운영되고 있는 소프트웨어의 대부분은 정말 많은 기능들이 있고, 각 기능마다 테스트 케이스가 많기 때문에, E2E 테스트를 도입하기까지의 시간이 많이 소요되는 단점이 있습니다.
저희 회사도 내년에 E2E 테스트를 도입하기 위해 품질관리팀과 협업하며 테스트 케이스를 작성하기 시작했는데, 페이지 한 개의 테스트 양이 200개 가량이 나와서.. 그래도 뭐 열심히 해볼 생각입니다🙂
마치며
지금까지 E2E 테스트를 알아보았습니다. 사실 단위테스트까지는 많은 개발자분들이 진행하고 있지만, E2E테스트는 많은 시간을 할애해서 도입해야하고 품질관리팀과의 많은 협업이 필요하기 때문에 실현 가능성은 낮지만, E2E 테스트를 알아보면서 느낀 많은 장점들만 본다면 도입의 필요성도 많이 느끼게 된 것 같습니다.
저도 E2E 테스트 도입을 위해서 개발 테스트 케이스를 작성중인데, 양이 어마어마하네요.. 포스팅 마치고 테스트 케이스 작성하러 가보겠습니다..😂
👨👩👦👦 오픈채팅방 운영
취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁
참여코드 : 456456
https://open.kakao.com/o/gVHZP8dg
관련 포스팅
*Unit(단위 테스트)와 Integration(통합 테스트) 정리 및 예시
'TIL' 카테고리의 다른 글
HTTP와 HTTPS의 차이점 (0) | 2024.04.25 |
---|---|
HTTP Method 종류 및 사용 방법(GET, POST, PUT, DELETE) (1) | 2024.04.19 |
Unit(단위 테스트)와 Integration(통합 테스트) 정리 및 예시 (0) | 2024.04.03 |
Java 날짜 함수 DateUtil 모음집 (2) | 2024.03.27 |
jstree 핸들링 방법(대용량 데이터 다루기 - 행걸리는 현상) (0) | 2024.03.07 |