1. 직면한 문제와 해결 방법
자동화 중 가장 먼저 직면했던 문제는 다음과 같습니다:
- 테스트 환경 불일치: 개발자마다 브라우저, OS, WebDriver 버전이 달라 로컬 테스트 실패 발생
- 코드 검증 부족: 검증되지 않은 코드가 병합되면서 테스트 실패 증가
테스트 환경이 작업자마다 달라, 코드 병합 후 각자의 환경에서 실패하는 경우가 많았습니다. pytest, selenium, poetry로 테스트 구조와 라이브러리를 통일했지만, 여전히 로컬 환경에서는 브라우저 및 OS 차이로 인해 실패하는 경우가 잦았습니다. 또한, 코드 검증이 충분하지 않아, 실패하는 코드가 병합되는 경우도 있었습니다.
이 문제를 해결하기 위해 UI 자동화 코드에 CI/CD 환경을 구축하였습니다.
해결 방법
- GitHub Actions 기반 Selenium 테스트 실행 → 병합 전에 코드 검증을 자동화하여 품질 유지
- Windows 환경의 테스트 서버 구축 → 항상 동일한 환경에서 테스트 실행
- 병렬 실행 도입 → 테스트 속도를 높여 QA 시간 단축
2. CI/CD 아키텍처
- Selenium + pytest : UI 자동화 테스트
- GitHub Actions : CI/CD 실행
- Windows Self-Hosted Runner : 테스트 실행 환경
- HTML 리포트 생성 : 테스트 결과 시각화
- MS Teams 알림 & Notion 이슈 관리
3. CI/CD 파이프라인 구축 전략
Windows OS에 Self-Hosted Runner 설정
CI/CD 환경을 구축하면서 가장 중요했던 부분 중 하나는 사용자와 유사한 테스트 환경을 마련하는 것이었습니다.
테스트 환경을 구축할 때 다음과 같은 옵션을 고려했습니다:
- IDC + 리눅스
- IDC + Windows OS
- Windows 노트북 + Windows OS
처음에는 IDC 내 Self-Hosted Runner에서 실행하도록 구성했지만, 실행할 때마다 라이브러리를 다시 설치해야 하는 문제로 인해 실행 속도가 느려지고, 특정 라이브러리 설치 실패가 발생했습니다.
이를 해결하기 위해 Windows 노트북 환경에서 직접 Self-Hosted Runner를 운영하는 방식으로 변경했습니다.
도입 효과:
- 필요한 라이브러리를 미리 설치하여 환경을 유지
- 테스트 실행 시마다 환경을 재설정할 필요 없이 빠른 실행 가능
GitHub Actions 워크플로우 작성
GitHub Actions의 YAML 파일에서는 poetry를 활용하여 의존성을 설치하고, 테스트를 실행한 후 MS Teams로 알림을 보내도록 구성하였습니다.
자동화 테스트 워크플로우 기능
- 사용자 입력을 받아 테스트 실행 (workflow_dispatch 활용)
- 테스트 환경 설정 및 의존성 설치
- 테스트 실행 및 결과 저장
- 테스트 리포트 업로드
간단한 GitHub Actions 예제
name: AutoTest (Dispatch)
on:
workflow_dispatch:
inputs:
init_data:
type: boolean
default: false
description: DB 및 데이터 초기화 여부
jobs:
test:
name: Test
runs-on: [self-hosted, test]
steps:
- uses: actions/checkout@v2
- name: Set up cache
uses: pat-s/always-upload-cache@v3.0.1
id: cache
with:
path: .venv
key: venv-${{ hashFiles('poetry.lock') }}
- name: Install dependencies
uses: nick-fields/retry@v2
with:
max_attempts: 5
timeout_minutes: 5
retry_on: error
command: |
poetry config virtualenvs.in-project true
poetry install --no-dev --no-root --no-interaction --no-ansi
- name: Run test
run: poetry run pytest --reruns 3 -n auto --base-url url --capability commit ${{ github.sha }}
- uses: actions/upload-artifact@v3
name: Upload reports
if: always()
with:
name: test-report-#${{github.run_number}}
path: reports
- workflow_dispatch를 활용하여 수동 실행 가능
- poetry를 활용하여 가상 환경을 설정하고 테스트 실행
- pytest 실행 후 HTML 리포트 생성 및 업로드
- 테스트 실패 시 MS Teams 알림 발송
4. 테스트 결과 리포팅 및 모니터링
효율적인 테스트 결과 분석과 신속한 이슈 대응을 위해 pytest-html을 활용하여 테스트 리포트를 자동 생성하고, MS Teams와 연동하여 실시간 알림 시스템을 구축하였습니다.
HTML 리포트 자동 생성의 장점
pytest-html을 도입하면서 가장 크게 체감한 장점은 테스트 결과를 직관적으로 확인할 수 있다는 점이었습니다. 특히, 실패한 테스트에 대한 스크린샷과 로그가 자동으로 첨부되어 디버깅이 훨씬 쉬워졌습니다.
과거에는 타이밍 문제로 인해 테스트 실패 원인을 찾기 어려운 경우가 많았지만, 이제는 실패 시점의 화면을 바로 확인할 수 있어 분석 속도가 크게 향상되었습니다. 또한, GitHub Actions에서 생성된 HTML 리포트를 자동 업로드하여 보관할 수 있어, 과거 테스트 결과를 추적하는 데도 유용합니다.
MS Teams & Notion 연동을 통한 실시간 모니터링
테스트 실패는 장애로 직결될 수 있기 때문에 즉각적인 대응이 필수적입니다. 이를 위해 MS Teams에 자동 알림을 보내고, Notion에 이슈를 등록하는 프로세스를 구축했습니다.
- 테스트 실패 시 MS Teams에 즉시 알림 → 담당자가 신속하게 원인 분석 가능
- Notion을 활용한 이슈 관리 → 지속적인 테스트 실패 내역을 추적하고 개선 방향 도출
이러한 자동화된 모니터링 시스템 덕분에 QA 및 개발팀이 빠르게 문제를 감지하고 대응할 수 있는 환경을 마련할 수 있었습니다.
5. 실제 적용 후 결과 & 개선 방향
CI/CD 환경에서 자동화 테스트를 실행하면서 다음과 같은 효과를 얻을 수 있었습니다:
- 테스트 자동 실행으로 QA 업무 효율성 증가
- 일관된 환경에서 테스트 가능
- 장애 발생 시 빠르게 감지 & 대응 가능
하지만, 개선이 필요한 부분도 있었습니다:
- 테스트 결과 대시보드 구축
- 현재는 개별 HTML 리포트로 확인하지만, 결과 데이터를 축적하여 대시보드 형태로 제공하면 더욱 효과적으로 테스트 트렌드를 분석할 수 있을 것입니다.
- 테스트케이스 관리 툴(Testrail)과의 연동
- 현재 Testrail을 테스트케이스 관리 도구로 사용하고 있는데, 자동화 테스트 결과를 테스트케이스와 매핑하여 체계적으로 관리할 필요가 있습니다.
이러한 개선 작업을 했던 경험도 공유할 수 있도록 많은 시행착오를 겪고 준비해 보겠습니다 😃
'QA > 자동화' 카테고리의 다른 글
테스트 설계 전략 및 구조 (0) | 2025.02.27 |
---|---|
poetry 설치 및 가상환경 세팅 (0) | 2025.02.23 |
UI 자동화 도입 및 도구 선정,이렇게 시작했습니다 (0) | 2025.02.22 |