지난 게시글에서 도커를 활용해서 Selenium Hub 컨테이너 및 Selenium Node 컨테이너를 실행하고 테스트 코드에서 이를 연결할 수 있는 방법에 대해 알아보았다. 다만, 구성된 컨테이너를 활용하여 여러 개의 테스트 케이스를 동시에 실행해 보면 병렬 실행되지 않고 큐에 쌓여 있는 것을 확인할 수 있다. (아래 스크린샷 참고)
그 이유는 기본적으로 컨테이너 하나당 하나의 세션만 실행되도록 구성하고 있기 때문인데, Github를 찾아보니 하나의 컨테이너/브라우저에서 하나의 CPU를 사용하면 안정성이 향상되기 때문이라고 한다.
물론 컨테이너 실행 시 환경 변수를 통해 컨테이너 당 세션을 증가시킬 수 있으나 사용 가능한 프로세서보다 많은 브라우저 세션을 실행하는 것을 권장하지 않으며, Selenium Grid를 활용한 영상 녹화 시 동일한 동영상에 여러 브라우저 세션이 녹화될 수 있다고 설명하고 있다. 부작용에 대하여 참고하도록 하자.
환경 변수를 추가하는 방법은 간단하다. 컨테이너 실행 시 SE_NODE_MAX_SESSIONS={늘릴 세션 수량}
옵션을 추가해 주면 된다. AS-IS와 TO-BE를 비교해 보면 다음과 같다.
// AS-IS
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
--shm-size="2g" \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
selenium/node-chrome:4.2.1-20220531
// TO-BE
$ docker run -d --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
--shm-size="2g" \
-e SE_EVENT_BUS_PUBLISH_PORT=4442 \
-e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
-e SE_NODE_MAX_SESSIONS=5 \
selenium/node-chrome:4.2.1-20220531
그리고 Selenium Hub에 접속해보면 다음과같이 Max. Concurrency
가 증가한 것을 확인할 수 있다.
준비된 여러 개의 테스트 케이스를 동시에 실행해서 기존과 비교하여 어떻게 달라졌는지 확인해 보자.
아래 스크린샷을 보면 두 개의 테스트 케이스가 동시에 실행되고 있으며, SE_NODE_MAX_SESSIONS=5
환경 변수를 통해 늘린 5개의 세션 중에 2개가 사용 중인 것을 볼 수 있다. 이로써 UI 자동화 테스트 케이스를 병렬 실행하여 실행 속도를 줄일 수 있고 브라우저 실행 환경(Node)를 보다 쉽고 편리하게 관리할 수 있다.