【7】 Selenium Grid, Docker를 활용한 UI 자동화 테스트 : kt NexR 기술블로그 ‘21 테크리포트

생성일
2021/12/07 04:56
태그
2021년
상반기
테크리포트
kt NexR
기술블로그
글쓴이
kyle.kim
속성
ktNexR_Techreport_Selenium Grid, Docker를 활용한 UI 자동화 테스트.pdf
속성 1

I. 서론

UI 자동화 테스트는 레거시 기능의 반복적 테스트 업무 감소, 신속하고 효율적인 프로세스 적용, 빠르고 정확한 시험 결과를 제공하므로 생산성을 쉽게 높일 수 있는 장점을 가지고 있어 DevOps, CI/CD 환경에서 UI 자동화 테스트는 필수 요소이다.
웹 기반 서비스는 사용자의 수 많은 웹 환경(웹 브라우저, OS 등)에 대응되어야 한다. 하지만, 기존 테스트는 테스터 인력이 적고, 테스터의 OS, 웹 환경(브라우저 종류, 버전)이 제한적이기 때문에 일반 사용자가 사용하는 웹 환경 구성에 대한 테스트 커버리지가 작다.
이 Tech Report에서는 웹 기반 서비스의 테스트 커버리지를 향상 시키기 위해 기존 개발한 UI 자동화 테스트 코드를 Selenium Grid로 테스트 병렬 수행하고, Docker로 테스트 환경 구성하는 자동화 테스트 시스템 구축하는 방법에 대해 작성한다.
Selenium Grid는 분산환경(서로다른 OS, 서로다른 Browser)에서 여러 개의 브라우져를 병렬적으로 테스트를 진행할 수 있게 도와주는 도구이다.
Docker는 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와주며, 계층화된 파일 시스템에 기반해 효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해주는 도구로 Selenium Docker Hub에 등록되어 있는 웹브라우저 이미지를 활용한다.

II. 관련 기술/연구, 선행작업

Selenium Grid

Selenium Grid는 분산환경(서로다른 OS, 서로다른 Browser)에서 여러 개의 브라우져를 병렬적으로 테스트를 진행할 수 있게 도와주는 도구이다. 여러 대의 노드에서 병렬적으로 테스트를 진행하기 때문에 테스트의 속도가 빠르다. 예를 들어서 100개의 테스트들이 있는 경우에 4대의 노드에서 테스트를 진행한다면 하나의 노드에서 테스트를 진행하는 경우보다 1/4의 시간이 걸린다. 각 Remote Node에 Selenium Sever를 설치하여 제어하며, Selenium Hub를 활용해 각 Remote Node의 작업들을 관리한다.

Selenium with Docker

Selenium Grid의 Remote Systems는 각 Node당 실제 Machine이나 VM를 활용해야 하고, 각 Node에 웹 브라우저 환경을 모두 설치하여 구성을 해야 한다. 이 Tech Report에서는 Docker를 활용하여 Selenium Docker Hub에 있는 Image를 활용하여 브라우저 종류, 브라우저의 버전에 대한 환경 구성을 모두 별도로 관리하고, 사용하지 않을때 각 컨테이너 관리가 용이하게 하였다.

선행 작업

Selenium 환경 구성

Docker를 사용하여 Selenium 그리드를 구성 할 때 일반 그리드처럼 허브 및 브라우저 노드를 Docker 컨테이너에 설치해야 하며 나중에 해당 Docker 컨테이너에서 허브와 노드를 시작할 수 있다. Docker를 사용하여 테스트를 실행하려면 5 개의 이미지를 설치해야 한다. 해당 이미지들은 Docker Hub(https://hub.docker.com/u/selenium)에서 찾을 수 있다.
1.
Selenium Hub 이미지 (https://hub.docker.com/r/selenium/hub)
2.
Selenium node-firefox 이미지 (https://hub.docker.com/r/selenium/node-firefox)
3.
Selenium node-chrome 이미지 (https://hub.docker.com/r/selenium/node-chrome)
4.
Selenium node-firefox-debug 이미지 (https://hub.docker.com/r/selenium/node-firefox-debug)
5.
Selenium node-chrome-debug 이미지 (https://hub.docker.com/r/selenium/standalone-chrome-debug)
위 Selenium 이미지는 아래 명령어를 수행하여 설치한다.
docker pull selenium/hub docker pull selenium/node-firefox docker pull selenium/node-chrome docker pull selenium/node-firefox-debug docker pull selenium/node-chrome-debug
모두 설치하였으면 아래와 같이 Docker 명령어를 통해 설치된 이미지를 확인한다.

Selenium Hub 시작

우선 아래 명령어를 통해 Hub를 시작한다.
docker run -d -p 4444:4444 --name selenium-hub selenium/hub
다음 링크를 확인하여 Selenium Hub가 잘 실행되었는지 확인한다. http://localhost:4444/grid/console

Selenium Node 시작

Hub가 잘 시작되었으면 Node를 시작해야 한다. 설치된 Chrome과 Firefox의 Node를 시작한다. 추가적으로 Debug 하기 위한 Chrome, Firefox의 Debug Node를 시작한다. 추후, VNS 접속 시 필요하다.
# Chrome docker run -d --link selenium-hub:hub selenium/node-chrome # FireFox docker run -d --link selenium-hub:hub selenium/node-firefox # Chrome Debug docker run -d -P --link selenium-hub:hub selenium/node-chrome-debug # Firefox Debug docker run -d -P --link selenium-hub:hub selenium/node-firefox-debug
Node를 모두 실행하면 Hub에 접속하여 아래와 같이 확인할 수 있다.
이제 아래 명령을 수행하여, 각 환경의 VNC로 접속하기 위한 Port를 확인하기 위해 명령을 수행하여 확인한다.
docker ps -a
chrome-debug Port : 49154
firefox-debug Port : 49153
VNC로 위 포트를 사용하여 접속한다. 기본 비밀번호는 secret 이다.

II. 실행

Selenium Grid의 Node 구성은 아래와 같이 구성하였다.
Browser
Version
Platform
Chrome
90
Linux
Chrome
91
Linux
Chrome
91
Windows 10
Edge
91
Windows 10
Firefox
89
Linux
Opera
89
Linux
OS 환경을 다양하게 하기 위해 위 표에서 Platform의 Linux는 Docker 환경으로 구성하였고, Windows 10은 개인 PC로 설정하였다

Docker 실행

Docker Compose로 구성하여 hub와 node를 자동으로 실행한다. Docker-Compose : Selenium_hub_v3.yml
docker-compose -f .\Selenium_hub_v3.yml up

Windows 10 OS 환경 node 실행

같은 폴더내에 각 broswer의 webdriver를 다운로드 해놓으면 자동으로 node에 가능한 browser로 등록된다.
java -jar .\selenium-server-4.0.0-beta-4.jar node --detect-drivers true

테스트 실행

아래와 같이 동일한 테스트를 각 브라우저별로 수행할 수 있게 코드를 구성했다. Git Repository : http://gitlab.nexrcorp.com/qa/nea-ui-test.git
<Pytest, Selenium을 활용하여 구성한 웹 Login 자동화 테스트>
메인화면에 접속하여 로그인하는 간단한 테스트 케이스를 활용하여 각 브라우저별로 수행해보았다.

Firefox 테스트 실행 결과

Edge 테스트 실행 결과

Chrome 테스트 실행 결과

III. 결론

반복적 업무 감소, 테스트 노력 절감 및 실수 감소, 효율적인 비용으로 유지보수 가능 등의 장점을 가지고 있는 UI 테스트 자동화를 어떻게 하면, 좀 더 다양한 환경에서 테스트를 할 수있을까로 시작하여 Selenium Grid와 Docker 환경 구성을 적용해 보았다. Selenium Grid와 Docker 환경 구성으로 기존 UI 자동화 테스트보다 다양한 브라우저 및 브라우저 버전 그리고 OS 별 테스트 가능하였다. QA에서는 회귀 테스트나 사용자 환경 테스트에 용이할 것으로 기대되며, 다양한 환경을 구성하여 테스트하는 M/M가 줄어들 것으로 예상된다. 그리고, TDD 개발 환경에서는 개발자가 레거시 코드에 대한 영향이 있는지 매기능마다 테스트하기 어려운데, 해당 환경을 구성하면 개발 후, Jenkins와 연동하여 테스트한다면 개발자테스트 관련 M/M가 많이 줄어들 것으로 예상된다. 위의 장점이 있어 R&D센터내 적용 가능한 개발 사이클이나 제품 테스트 단계를 확인하여 추가로 도입하여 적용하는 것을 목표로 하고 있다.

VI. 차후 계획

적용해보면서 추가로 적용해야할 필요한 기능, 일감들은 아래와 같다.
브라우저, 버전별 테스트 결과 레포트
Jenkins 연동
사내 Docker 서버 이전하여 활용
【7】 Selenium Grid, Docker를 활용한 UI 자동화 테스트 : kt NexR 기술블로그 ‘21 테크리포트
Reference
본 기술블로그에 게재되는 모든 컨텐츠의 저작권은 케이티넥스알(kt NexR)에서 가지고 있으며, 동의 없는 컨텐츠 수정 및 무단 복제는 금하고 있습니다. 컨텐츠(글/사진/영상 등)를 공유하실 경우 반드시 출처를 밝혀주시기 바랍니다. Copyright(c) 2021 kt NexR, Inc. All Rights Reserved.