본문 바로가기
QA/자동화

CI/CD 환경 구축기

by jiyeexxi 2025. 3. 3.
반응형

1. 직면한 문제와 해결 방법

자동화 중 가장 먼저 직면했던 문제는 다음과 같습니다:

  1. 테스트 환경 불일치: 개발자마다 브라우저, OS, WebDriver 버전이 달라 로컬 테스트 실패 발생
  2. 코드 검증 부족: 검증되지 않은 코드가 병합되면서 테스트 실패 증가

 

테스트 환경이 작업자마다 달라, 코드 병합 후 각자의 환경에서 실패하는 경우가 많았습니다. pytest, selenium, poetry로 테스트 구조와 라이브러리를 통일했지만, 여전히 로컬 환경에서는 브라우저 및 OS 차이로 인해 실패하는 경우가 잦았습니다. 또한, 코드 검증이 충분하지 않아, 실패하는 코드가 병합되는 경우도 있었습니다.

이 문제를 해결하기 위해 UI 자동화 코드에 CI/CD 환경을 구축하였습니다.

해결 방법

  1. GitHub Actions 기반 Selenium 테스트 실행 → 병합 전에 코드 검증을 자동화하여 품질 유지
  2. Windows 환경의 테스트 서버 구축 → 항상 동일한 환경에서 테스트 실행
  3. 병렬 실행 도입 → 테스트 속도를 높여 QA 시간 단축

 

 

2. CI/CD 아키텍처

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 환경을 구축하면서 가장 중요했던 부분 중 하나는 사용자와 유사한 테스트 환경을 마련하는 것이었습니다.

테스트 환경을 구축할 때 다음과 같은 옵션을 고려했습니다:

  1. IDC + 리눅스
  2. IDC + Windows OS
  3. 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을 도입하면서 가장 크게 체감한 장점은 테스트 결과를 직관적으로 확인할 수 있다는 점이었습니다. 특히, 실패한 테스트에 대한 스크린샷과 로그가 자동으로 첨부되어 디버깅이 훨씬 쉬워졌습니다.

 

html 테스트 결과

 

과거에는 타이밍 문제로 인해 테스트 실패 원인을 찾기 어려운 경우가 많았지만, 이제는 실패 시점의 화면을 바로 확인할 수 있어 분석 속도가 크게 향상되었습니다. 또한, GitHub Actions에서 생성된 HTML 리포트를 자동 업로드하여 보관할 수 있어, 과거 테스트 결과를 추적하는 데도 유용합니다.

 

 

MS Teams & Notion 연동을 통한 실시간 모니터링

테스트 실패는 장애로 직결될 수 있기 때문에 즉각적인 대응이 필수적입니다. 이를 위해 MS Teams에 자동 알림을 보내고, Notion에 이슈를 등록하는 프로세스를 구축했습니다.

  • 테스트 실패 시 MS Teams에 즉시 알림 → 담당자가 신속하게 원인 분석 가능
  • Notion을 활용한 이슈 관리 → 지속적인 테스트 실패 내역을 추적하고 개선 방향 도출

이러한 자동화된 모니터링 시스템 덕분에 QA 및 개발팀이 빠르게 문제를 감지하고 대응할 수 있는 환경을 마련할 수 있었습니다.

teams 알림

5. 실제 적용 후 결과 & 개선 방향

CI/CD 환경에서 자동화 테스트를 실행하면서 다음과 같은 효과를 얻을 수 있었습니다:

  • 테스트 자동 실행으로 QA 업무 효율성 증가
  • 일관된 환경에서 테스트 가능
  • 장애 발생 시 빠르게 감지 & 대응 가능

하지만, 개선이 필요한 부분도 있었습니다:

  1. 테스트 결과 대시보드 구축
    • 현재는 개별 HTML 리포트로 확인하지만, 결과 데이터를 축적하여 대시보드 형태로 제공하면 더욱 효과적으로 테스트 트렌드를 분석할 수 있을 것입니다.
  2. 테스트케이스 관리 툴(Testrail)과의 연동
    • 현재 Testrail을 테스트케이스 관리 도구로 사용하고 있는데, 자동화 테스트 결과를 테스트케이스와 매핑하여 체계적으로 관리할 필요가 있습니다.

이러한 개선 작업을 했던 경험도 공유할 수 있도록 많은 시행착오를 겪고 준비해 보겠습니다 😃

반응형