본문 바로가기

Study Information Technology

웹 애플리케이션을 위한 자동화 테스트 파이프라인 개발 Selenium과 GitHub Actions 활용하기

728x90
반응형

웹 애플리케이션을 위한 자동화 테스트 파이프라인 개발: Selenium과 GitHub Actions 활용하기

Overview

웹 애플리케이션의 품질을 보장하기 위해 자동화 테스트는 필수적인 과정입니다. Selenium과 CI/CD 도구인 GitHub Actions를 이용한 자동화 테스트 파이프라인을 구축하는 것은 이러한 품질 보증 프로세스를 효율적으로 관리하는 방법입니다. 이 글에서는 Selenium을 사용하여 웹 애플리케이션의 기능 테스트를 자동화하고, 이를 GitHub Actions를 통해 CI/CD 파이프라인에 통합하는 방법을 자세히 설명하겠습니다.

1. Selenium 이해하기

1.1 Selenium 소개

Selenium은 웹 애플리케이션을 테스트하기 위한 오픈 소스 도구입니다. 다양한 브라우저에서 웹 애플리케이션의 동작을 자동으로 테스트할 수 있도록 지원합니다. Selenium의 주요 구성 요소는 다음과 같습니다:

  • Selenium WebDriver: 실제 브라우저를 제어하여 사용자 상호작용을 자동화합니다.
  • Selenium IDE: 테스트를 기록하고 재생할 수 있는 도구로, 코드 작성이 필요 없는 사용자 친화적인 환경을 제공합니다.
  • Selenium Grid: 여러 머신에서 테스트를 동시에 실행하여 테스트 시간을 단축할 수 있습니다.

1.2 Selenium WebDriver 설치

Selenium WebDriver를 사용하기 위해서는 우선 Python과 Selenium 패키지를 설치해야 합니다. 아래는 Python 환경에서 Selenium을 설치하는 방법입니다.

pip install selenium

또한, Chrome 브라우저를 사용할 경우 ChromeDriver를 설치해야 합니다. ChromeDriver는 Chrome의 버전에 맞는 드라이버를 다운로드하여 설치해야 합니다. ChromeDriver 다운로드 페이지에서 적합한 버전을 선택할 수 있습니다.

1.3 Selenium 예제 코드

Selenium을 이용한 간단한 웹 테스트 코드는 다음과 같습니다. 이 코드는 구글 홈페이지를 열고, 검색어를 입력한 후 결과를 확인합니다.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# Chrome WebDriver 경로 설정
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

try:
# 구글 홈페이지 열기
driver.get("https://www.google.com")

# 검색 입력창 찾기
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium testing')
search_box.send_keys(Keys.RETURN)

# 잠시 대기 후 결과 확인
time.sleep(2)
assert "Selenium testing" in driver.title
finally:
driver.quit()

이 코드는 Selenium WebDriver를 사용하여 구글 검색 페이지에 접속하고, 'Selenium testing'이라는 검색어를 입력한 후 결과 페이지의 제목을 확인합니다.

2. GitHub Actions를 통한 CI/CD 통합

2.1 GitHub Actions 소개

GitHub Actions는 코드 변경 사항이 있을 때마다 자동으로 작업을 수행할 수 있는 CI/CD 도구입니다. 이를 통해 테스트 자동화, 빌드, 배포 등을 쉽게 설정할 수 있습니다.

2.2 GitHub Actions 워크플로우 설정

GitHub Actions를 사용하여 Selenium 테스트를 자동으로 실행하기 위해 워크플로우 파일을 작성해야 합니다. 다음은 .github/workflows/test.yml 파일의 예시입니다.

name: Selenium Tests

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'

- name: Install dependencies
run: |
pip install selenium

- name: Run Selenium tests
run: |
python -m unittest discover -s tests

2.3 워크플로우 단계 설명

  • on: 어떤 이벤트에서 이 워크플로우가 실행될지를 정의합니다. 여기서는 main 브랜치에 푸시나 풀 리퀘스트가 발생할 때마다 실행됩니다.
  • jobs: 실행할 작업을 정의합니다. 여기서는 test라는 이름의 작업을 정의하고, ubuntu-latest 환경에서 실행됩니다.
  • steps: 각 단계에서 수행할 작업을 나열합니다.
  • Checkout code: 코드 저장소를 체크아웃하여 최신 코드를 가져옵니다.
  • Set up Python: 필요한 Python 버전을 설정합니다.
  • Install dependencies: 필요한 패키지를 설치합니다.
  • Run Selenium tests: 실제 테스트를 실행합니다.

3. 테스트 작성 및 실행

3.1 테스트 작성하기

Selenium 테스트는 일반적으로 unittest 또는 pytest와 같은 테스트 프레임워크를 사용하여 작성합니다. 다음은 unittest를 사용하여 테스트를 작성한 예입니다.

import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

class GoogleSearchTest(unittest.TestCase):

@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

def test_search(self):
self.driver.get("https://www.google.com")
search_box = self.driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium testing')
search_box.send_keys(Keys.RETURN)
self.assertIn("Selenium testing", self.driver.title)

@classmethod
def tearDownClass(cls):
cls.driver.quit()

if __name__ == "__main__":
unittest.main()

3.2 테스트 실행

위의 테스트 코드를 tests/test_google_search.py 파일로 저장한 후, GitHub Actions에서 자동으로 실행되도록 설정해둔 상황에서 코드에 푸시하면 GitHub Actions가 이 파일을 찾아 실행하게 됩니다.

4. 에러 및 문제 해결

4.1 일반적인 에러

  • WebDriverException: ChromeDriver가 경로에 없거나 버전이 맞지 않을 때 발생합니다. ChromeDriver의 경로를 다시 확인하고, Chrome 브라우저의 버전과 일치하는 드라이버를 다운로드해야 합니다.

  • ElementNotFoundException: 테스트 코드에서 찾으려는 요소가 페이지에 없을 때 발생합니다. 이 경우, 페이지가 완전히 로드되기 전에 요소를 찾으려 할 수 있습니다. WebDriverWait을 사용하여 요소가 나타날 때까지 기다리도록 수정해야 합니다.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for the search box to be present
search_box = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.NAME, 'q'))
)

5. 결론

Selenium과 GitHub Actions를 이용하여 웹 애플리케이션의 자동화 테스트 파이프라인을 구축하는 것은 지속적인 통합 및 배포 환경에서 품질을 보장하는 강력한 방법입니다. 테스트를 자동화하면 개발 속도를 높이고, 배포 후 버그 발생 가능성을 줄일 수 있습니다.

자동화 테스트의 중요성과 CI/CD의 필요성을 잘 이해하고, 이를 실제 프로젝트에 적용해보세요. 이를 통해 소프트웨어 개발 프로세스를 더욱 효율적으로 개선할 수 있습니다.

참고문서

728x90
반응형