지난 게시글에서 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가 실행되고 있는 것을 확인할 수 있다.