Apache Airflow e2e 테스트에 기여하는 방법

Apache Airflow의 E2E(End-to-End) 테스트는 실제 사용자 관점에서 웹 서버의 주요 흐름과 UI 동작이 기대한 대로 작동하는지를 검증하기 위한 테스트를 진행하고 있습니다.

단위 테스트나 통합 테스트만으로는 놓치기 쉬운 Frontend–Backend 간 연동 이슈, 실제 브라우저 환경에서의 문제, 또는 브라우저별 호환성 이슈를 탐지하는 데 중요한 역할을 합니다.

E2E 테스트는 전체 시스템이 사용자 시나리오 기준으로 정상 동작하는지를 보장하는 최상위 검증 계층입니다.

왜 E2E 테스트를 진행하는가?

E2E 테스트는 다음을 보장하기 위해 사용됩니다:

  • 실제 브라우저 환경에서의 사용자 워크플로우 검증
  • 웹서버(Frontend–Backend) 통합 동작 확인
  • 회귀(regression) 방지
  • 크로스 브라우저 호환성 검증
  • 주요 UI 흐름의 안정성 확보

E2E 테스트를 진행하는 법

Breeze 사용하기(권장)

가장 권장되는 실행 방법은 Breeze를 사용하는 것입니다.

# 전체 UI E2E 테스트 실행
breeze testing ui-e2e-tests

# 특정 브라우저 실행
breeze testing ui-e2e-tests --browser firefox

# 특정 테스트만 실행
breeze testing ui-e2e-tests --test-pattern "dag-trigger.spec.ts"

# 디버그 모드
breeze testing ui-e2e-tests --debug-e2e

# 브라우저를 화면에 표시하며 실행
breeze testing ui-e2e-tests --headed

Breeze는 컨테이너 기반 개발 환경을 제공하므로, 로컬 환경 차이 없이 일관된 테스트 실행이 가능하다는 장점이 있어 권장됩니다.

직접 실행하는 방법

이미 Airflow 웹서버가 http://localhost:8080에서 실행 중인 경우 아래와 같이 진행할 수 있습니다.

cd airflow-core/src/airflow/ui

pnpm install
pnpm test:e2e:install
pnpm test:e2e

기여하는 방법

이 E2E 테스트 프레임워크는 Page Object Model (POM) 패턴을 따릅니다.

각 페이지의 요소와 동작을 별도의 Page 클래스에 캡슐화하여 다음을 달성합니다.

  • 테스트 코드의 유지보수성 향상
  • 중복 코드 감소
  • 재사용성 개선
  • 테스트 구조의 일관성 유지

새로운 테스트를 추가하는 단계

1. 페이지 객체 생성 (필요한 경우)

pages/ 폴더에 새로운 페이지 클래스를 추가합니다.

  • 기본 페이지 클래스를 상속합니다.
  • 화면 요소를 선택자로 정의합니다.
  • 화면에서 수행할 동작을 메서드로 구현합니다.

기존 예시:

2. 테스트 파일 생성

specs/ 디렉토리에 테스트 파일을 생성합니다.

  • 페이지 객체를 불러옵니다.
  • 사용자 시나리오 중심으로 테스트를 작성합니다.

기존 예시:

3. 로컬에서 실행

breeze testing ui-e2e-tests --test-pattern "your-test.spec.ts"

4. 풀 리퀘스트 제출

로컬에서 모든 테스트가 통과하는 것을 확인한 후
변경 사항을 제출합니다.

권장 사항

E2E 테스트 작성 시 다음을 권장합니다.

1. 가능하면 data-testid 사용

CSS 선택자 대신 안정적인 식별자를 사용합니다.

2. 테스트는 서로 독립적으로 작성

각 테스트는 다른 테스트의 실행 결과에 의존하지 않아야 합니다.
필요한 초기 상태는 테스트 내부에서 직접 준비합니다.

3. 실제 기능을 검증하는 단언 작성

단순히 화면이 열리는지만 확인하지 말고, 기능이 정상적으로 동작하는지를 검증합니다.

4. 불안정한 테스트 패턴 피하기

  • 실행 시점에 따라 달라지는 날짜/시간 사용 금지
  • 임의 대기 시간 사용 금지
  • 비결정적인 테스트 데이터 사용 지양
  • 테스트 실행 순서에 의존하지 않기

마무리하며

Apache Airflow의 E2E 테스트는 실제 사용자 환경에서 웹 애플리케이션의 핵심 기능을 검증하는 중요한 테스트 계층입니다.

다만 현재 Airflow CI에서 가장 불안정한 영역 중 하나이기도 합니다.
주요 기능에 대한 테스트 커버리지는 확보되어 있지만, 여전히 개선과 안정화가 필요한 상태입니다.

이 부분의 안정화 작업을 진행해보려고 계획하고 있습니다.
(아직 혼자만의 계획이긴한데… 며칠안에 진행할 것 같습니다…)
혹시 함께 관심을 가지고 논의하거나 기여해보고 싶은 분이 있다면 댓글로 알려주세요.

2개의 좋아요

손들어봅니다

1개의 좋아요

호기롭게.. 일단 손을 들어봅니다.

i18n으로 시작한 기여자라도 도전할만하겠죠..? ㅎㅎ

안되면 수행부터 해보겠습니다요..!

1개의 좋아요

@yuseok89 @stats
방금 만들었습니다 :slight_smile:

혹시 수정하고 e2e 테스트할 때, breeze testing ui-e2e-tests --test-pattern "backfill.spec.ts" 이렇게 쓰면 될까요? 아니면.. 각 브라우저별로 나눠서 해도 괜찮을까요?
breeze testing ui-e2e-tests --test-pattern "backfill.spec.ts" --browser chromium

감사합니다.

네, breeze testing ui-e2e-tests --test-pattern "backfill.spec.ts" --browser chromium 이렇게 하시면 됩니다. 하지만 지금 좀 불안정하기 때문에 worker의 수를 2로 아래와 같이 제한을 두는 것도 좋습니다.

breeze testing ui-e2e-tests --test-pattern "backfill.spec.ts" --browser chromium --workers 2

감사합니다. 얼른 수정해야겠네요!

1개의 좋아요

호현님 작업 머지 완료 :raising_hands:
감사합니다!!

1개의 좋아요

좋은 가이드라인 & 피드백 주셔서 감사드립니다 :slight_smile:

1개의 좋아요

이제 어느정도 리뷰에도 익숙해져서 메일링 리스트에도 기여 기회로 올렸습니다 :slight_smile:

https://lists.apache.org/thread/csm0fn74thdj1dbt8qk8d1d9kmrn0t4c