반응형

들어가며

설명

Selenium JUnit 프로젝트 설정

프로젝트 생성 및 WebDriver 추가

  • 다운로드
  • Linux용 드라이버 저장 경로 : <프로젝트>/webdriver/chrome/chromedriver
  • Windows용 드라이버 저장 경로 :  <프로젝트>/webdriver/chrome/chromedriver.exe
  • git에서 드라이버 파일을 실행 가능 파일로 관리할 수 있도록 아래 명령어 수행 후 commit & push
    git update-index --chmod=+x webdriver/chrome/chromedriver
    git update-index --chmod=+x webdriver/chrome/chromedriver.exe
    

Dependency 추가

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-chrome-driver</artifactId>
    <version>3.14.0</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.14.0</version>
</dependency>

JUnit TC 추가

테스트 시나리오

  • 유튜브 메인에서 "펭수" 검색
  • 목록에 노출된 "자이언트 펭TV" 채널로 접속하기 위해 섬네일 이미지 클릭
  • 해당 채널의 제목이 "자이언트 펭TV"가 맞는지 확인

Selenium IDE로 테스트 시나리오 레코딩하기 (필요한 경우에만 참고)

  • IDE 실행
  • IDE > Create a new project 선택 > 아무 이름 입력 후 OK
  • IDE > 상단에 Playback base URL에 URL 입력 : https://www.youtube.com/
  • IDE > 우상단에 REC 버튼 클릭하면 브라우저 open
  • BROWSER > 검색창에 "펭수" 입력 후 검색
  • BROWSER > 채널 섬네일 이미지 클릭
  • IDE > 하단에서 Command 추가
    • Command : assert text
    • Target : Select target in page 버튼 클릭 후 브라우저의 채널 제목 영역 클릭해서 지정
    • Value : 자이언트 펭TV
  • IDE > 상단에 빨간 버튼 눌러 레코딩 종료
  • IDE > 불필요한 코드 Command 제거 및 정리
  • IDE > 상단 Run current test 버튼 클릭해 테스트 성공하는지 확인
  • IDE > 좌측 테스트 목록에서 우클릭 > Export > Java JUnit 선택 후 EXPORT해서 TC 코드로 저장

테스트 코드

public class YoutubeChannelTest {
    private static final int TIMEOUT = 10;

    static {
        if (SystemUtils.IS_OS_WINDOWS) {
            System.setProperty("webdriver.chrome.driver", "webdriver/chrome/chromedriver.exe");
        }

        if (SystemUtils.IS_OS_LINUX) {
            System.setProperty("webdriver.chrome.driver", "webdriver/chrome/chromedriver");
        }
    }

    private WebDriver driver;

    @BeforeEach
    public void setUp() {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("headless"); // 브라우저를 띄우지 않고 테스트
        options.addArguments("--mute-audio"); // 소리 끄기

        driver = new ChromeDriver(options);
    }

    @AfterEach
    public void tearDown() {
        driver.quit();
    }

    @Test
    public void 펭수TV_유튜브_채널명_확인() {
        driver.get("https://www.youtube.com/");

        new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.elementToBeClickable(By.name("search_query"))).click();
        new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.elementToBeClickable(By.id("container"))).click();
        new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.elementToBeClickable(By.name("search_query"))).click();
        new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.presenceOfElementLocated(By.name("search_query"))).sendKeys("펭수");
        new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.presenceOfElementLocated(By.name("search_query"))).sendKeys(Keys.ENTER);
        new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.elementToBeClickable(By.cssSelector(".ytd-channel-renderer > #img"))).click();

        Assertions.assertEquals("자이언트 펭TV", new WebDriverWait(driver, TIMEOUT).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#channel-container yt-formatted-string.ytd-channel-name"))).getText());
    }
}

Jenkins 설정

Jenkins Job 생성

Jenkins Job 설정

  • spring-selenium > 구성
  • Build > Invoke top-level Maven targets
    • Maven Version
      • maven-3.6.3
    • Goals
      clean compile test
      
  • 빌드 후 조치 > Publish JUnit test result report
    • Test report XMLs
      • target/surefire-reports/TEST-*.xml
  • 저장

libnss3 모듈 모듈 설치

  • 명령어
    sudo apt-get install libnss3
    
  • libnss3은 chromedriver 실행시 필요한 모듈. 모듈 없을 경우 TC 실행시 아래 문구의 오류 발생.
    error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
    

Jenkins 서버에 chrome 설치

  • 명령어
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - \
    && sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && sudo apt-get update \
    && sudo apt-get install google-chrome-stable
    
  • chrome 미설치 후 TC 실행시 아래 문구의 오류 발생
    org.openqa.selenium.WebDriverException: unknown error: cannot find Chrome binary
    
  • 참고

Jenkins 빌드 실행

  • TC 성공하는지 확인
반응형

'Development > Jenkins' 카테고리의 다른 글

[Jenkins] Jenkins Pipeline  (0) 2020.12.28
[Jenkins] Jenkinsfile  (0) 2020.12.28
[Jenkins] Publish Over SSH 설정  (0) 2019.05.01
[Jenkins] npm 빌드 설정  (0) 2019.04.30
[Jenkins] git 프로젝트 빌드 설정  (0) 2019.04.30

+ Recent posts