QA 자동화 봇 (스모크·단위·E2E + AI 테스트 생성)
2026년 3월 - 현재Developer주식회사 루멘테라
PlaywrightTypeScriptClaude APIAWS BedrockStagehandGitHub ActionsAWS EC2Linear SDK
Overview
PR마다 스모크·단위·E2E 90개 이상의 케이스를 자동 실행하고, 변경 diff를 분석해 Playwright 테스트를 AI로 생성·검증까지 하는 QA 봇을 설계·구축했습니다. 5개월 넘게 CI에서 지속 실행되며 팀의 PR 게이트로 정착했습니다.
릴리스마다 사람이 손으로 화면을 눌러보는 QA가 병목이었습니다. 역할별 로그인 fixture를 만들고 고정 스위트를 PR 게이트로 세운 뒤, 변경된 코드에 대한 테스트는 AI가 생성하도록 파이프라인을 붙였습니다. 다만 AI가 만든 테스트를 그대로 신뢰할 수는 없기에, 문법 검증·DB 읽기 전용 강제·비용 로깅 같은 검증 장치를 함께 설계했습니다.
Challenges & Solutions
수동 QA가 릴리스 병목
Before
- 릴리스마다 역할별 주요 플로우를 사람이 직접 클릭해 확인
- 확인 범위가 담당자마다 달라 회귀 버그가 운영까지 흘러감
After
- 역할별 로그인 fixture 기반으로 스모크·단위·E2E 3계층에 걸쳐 90개 이상의 케이스 구성
- main 대상 PR에서 자동 실행되는 게이트로 배선, 결과를 PR 코멘트와 HTML 리포트로 회수
- 특정 티켓 버그를 재현하는 회귀 스펙을 따로 두어 같은 버그가 두 번 나지 않도록 고정
변경마다 테스트를 사람이 새로 써야 함
Before
기능이 바뀔 때마다 어떤 화면이 영향을 받는지 판단하고 스펙을 손으로 추가해야 하는 구조
After
- 티켓 추출 → diff 분석 → 파일 분류 → 라이브 DOM 셀렉터 수집 → 프롬프트 구성 → 생성 → 검증 → 실행 → PR 코멘트 파이프라인 구축
- 변경 코드와 사이드이펙트 예상 범위만 테스트하도록 제한 (무관한 테스트 생성 방지)
- 셀렉터 수집에는 저비용 모델, 테스트 생성에는 고성능 모델로 역할 분리
- 셀렉터 수집이 실패해도 정적 셀렉터 패턴으로 fallback해 파이프라인이 멈추지 않도록 설계
AI가 만든 테스트를 그대로 믿을 수 없음
Before
생성된 코드가 문법적으로 깨지거나, 테스트가 실제 데이터를 건드릴 위험이 있는 상태
After
- 생성 코드 TypeScript 문법 검증 후 실패 시 에러 컨텍스트를 넣어 1회 재시도
- AI가 생성한 테스트가 데이터를 변조하지 못하도록 쓰기 요청을 차단
- AI 생성 스펙은 참고용으로 분리 — 실패해도 PR 체크에 반영되지 않게 하고, 고정 스위트만 게이트로 사용
- 토큰 비용을 로그 prefix로 노출하고, 스펙 실행 자체는 LLM을 쓰지 않아 비용이 0임을 teardown에 기록
CI 실행 시간과 운영 비용
Before
전체 스위트를 순차 실행하면 PR 피드백이 늦고, 테스트 전용 환경이 놀면서도 계속 비용을 쓰는 구조
After
- 워커 3 병렬 + 빌드 해시 스킵 + 빌드 병렬화로 웜 캐시 기준 8~12분까지 단축
- 테스트 전용 실행 환경을 상시 가동하지 않고 필요한 시점에만 기동·종료하도록 운용
Impact
90+
스모크 · 단위 · E2E 3계층
PR마다 자동 실행되는 테스트 케이스
지속 실행
5개월+
팀의 PR 게이트로 정착
read-only
AI 생성 테스트의 데이터 변조 차단