본문으로 건너뛰기
  1. Posts/

셀레니움을 활용하여 테스트를 위한 여러 사용자 로그인 자동화하기

·2 분· loading · loading ·
Sseung
Techtopic Selenium
InnoFactory
작성자
InnoFactory
스마트팩토리, 산업자동화, Digital Transformation, 디지털팩토리, PLM, ALM, Digital Manufacturing, Visualization, 3D CAD, Digital Twin, Big Data, IIoT 솔루션 전문업체
작성자
SeungHyeon Lee
R&D Center Developer

시스템을 테스트할 때 여러 사용자로 권한을 테스트하기 위해 반복적인 로그인이 필요한 경우가 있습니다.

본 포스팅에서는 셀레니움을 활용하여 반복적으로 여러 사용자를 로그인 시킨 브라우저 환경을 준비하는 작업이 필요한 경우 해당 작업을 자동화 하는 방법을 소개합니다.

셀레니움이란
#

셀레니움(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();
}