
지난 게시글에서 Docker를 활용하여 Docker 네트워크를 구성했고, 이어서 Selenium Hub와 Node 컨테이너를 구성했었다. 이번 게시글에서는 어떻게 병렬 테스트를 수행할 수 있는지, 그리고 테스트 코드에서 Selenium Hub 컨테이너에 어떻게 연결할 수 있는지 간략하게 기록해 볼 예정이다.
테스트 코드에서 Selenium 컨테이너에 접근하는 방법은 매우 간단하다.
이전 게시물에서 grid라는 이름의 docker 네트워크를 구성했고, 이 네트워크에 Selenium Hub 컨테이너와 Selenium Node 컨테이너를 실행했었다. 이 과정을 통해 내 PC의 웹 브라우저에서 http://localhost:4444/ URL을 통해 Selenium Hub에 접근할 수 있었는데, 테스트 코드에도 이 내용을 반영해 주면 된다.
코드로 비교해 보자. 우선 기존의 테스트 코드이다.
기존의 테스트 코드에서는 ChromeDriverManager를 통해 Webdriver를 세팅해 주고 있었다.
import unittest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class BaseTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
cls.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) # Webdriver 세팅 코드
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
그리고 아래 코드는 Selenium Hub에 연결한 코드이다.
기존의 코드와 비교해 보면 webdriver.Remote 객체를 통해 원격 서버에서 실행할 수 있는 웹 드라이버를 세팅하고 있고, 매개변수로 Selenium Hub의 URL을 넘겨주어 접근할 수 있도록 제공해 주고 있다.
import unittest
from selenium import webdriver
class BaseTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.set_capability('browserName', 'chrome')
cls.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', options=chrome_options) # Webdriver 세팅 코드
def setUp(self) -> None:
pass
def tearDown(self) -> None:
pass
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
Selenium Hub, Selenium Node 컨테이너가 실행되어 있는 상태에서 테스트 코드를 실행시켜보면 원격 서버의 웹 드라이버로 UI 자동화 테스트가 수행되는 것을 확인할 수 있다.

그리고 테스트가 수행되는 동안 Selenium Hub에 접속해서 확인해 보면 Selenium Node가 실행되고 있는 것을 확인할 수 있다.
