시스템을 테스트할 때 여러 사용자로 권한을 테스트하기 위해 반복적인 로그인이 필요한 경우가 있습니다.
본 포스팅에서는 셀레니움을 활용하여 반복적으로 여러 사용자를 로그인 시킨 브라우저 환경을 준비하는 작업이 필요한 경우 해당 작업을 자동화 하는 방법을 소개합니다.
셀레니움이란 #
셀레니움(Selenium)은 웹 애플리케이션의 자동화 테스트를 위한 오픈 소스 도구로, 브라우저와의 상호작용을 자동화하여 웹 페이지를 테스트하고 제어할 수 있습니다.
Selenium은 여러 프로그래밍 언어를 지원하며, 다양한 브라우저에서 실행될 수 있는 테스트 스크립트를 작성할 수 있습니다.
웹 애플리케이션의 동작을 자동으로 테스트하고 검증함으로써 시스템 품질을 향상시키고 생산성 향상에 도움을 줄 수 있습니다.
셀레니움을 이용한 로그인 처리 #
본 포스팅에서는 크롬을 기준으로, 자바를 사용해 셀레니움을 사용해보겠습니다.
일반적으로 크롬에서는 동일한 사용자 프로필로 여러 개의 탭을 열 경우 로그인 세션이 공유됩니다.
이는 크롬이 사용자의 인증 정보를 해당 프로필에서 관리하고, 동일한 프로필로 여러 개의 탭을 열 경우 인증 정보를 공유하기 때문인데 이 때문에 여러 사용자로의 로그인은 단순히 탭을 여러개 생성하는것으로는 불가능합니다.
이런 이유로 여러 사용자로 로그인 하여 테스트 하기 위해서는 로그인/로그아웃 작업을 반복하거나 크롬, 엣지의 시크릿 모드로 창을 따로 띄워 각각 로그인해야하는 불편함이 발생할 수 있습니다.
이런 수고로움을 줄이기 위해 셀레니움을 사용하여 WebDriver 인스턴스를 별도로 생성하는 방식을 통해 여러 사용자 로그인을 가능하게 작업한 내용입니다.
코드상의 WebDriverFactory은 크롬 뿐 아니라 Edge, Firefox 까지 고려된 WebDriver 인스턴스를 생성할 수 있는 팩토리 클래스 이며, 기능상으로는 단순히 로그인 url로 로그인 정보인 id와 password를 입력해 로그인 버튼을 눌러 로그인까지만 진행하는 동작을 수행합니다.
String url = "{테스트 링크}";
Map<String, String> userInfos = new HashMap<>();
userInfos.put("admin", "1");
userInfos.put("aadmin", "1");
userInfos.put("slee", "1");
for(Map.Entry<String, String> entry : userInfos.entrySet()) {
WebDriver driver = WebDriverFactory.newWebDriver();
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3000));
// #. 새로운 탭 열기
driver.get(url);
Thread.sleep(3000);
// 로그인 element 검색
WebElement usernameInput = wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.className("login_id"))));
WebElement passwordInput = wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.className("login_pw"))));
WebElement loginButton = wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.className("login_btn"))));
// 로그인 정보 입력
usernameInput.sendKeys(entry.getKey());
passwordInput.sendKeys(entry.getValue());
loginButton.click();
}