1. 시스템 테스트의 한계와 Checkset의 탄생 배경
Rails 개발자들에게 익숙한 시스템 테스트는 실행 속도가 느리고 UI 변화에 민감하여 테스트 결과가 일관되지 않은(Flaky) 경우가 많습니다. 또한 대부분의 테스트가 로컬이나 CI 환경에서만 작동하도록 설계되어 있어 배포 후 실제 운영 환경(Production)에서 수동으로 진행하는 스모크 테스트를 대체하지 못하는 한계가 있습니다. Checkset은 이러한 문제를 해결하기 위해 동일한 검증 로직을 다양한 URL 타겟에 적용할 수 있도록 만들어졌습니다.
2. 주요 특징 및 시스템 테스트와의 차별점
Checkset은 다음과 같은 차별화된 장점을 제공합니다. - 환경 독립성: 애플리케이션 코드베이스 내부에 위치할 필요가 없으며 독립적인 검증 도구로 작동합니다. - 다중 타겟팅: 동일한 Checkset을 로컬, 스테이징, 운영 환경 등 서로 다른 URL을 대상으로 실행할 수 있습니다. - 유연한 스위트 구성: 서브도메인(예: admin.example.com, app.example.com)별로 별도의 브라우저 컨텍스트를 가지는 테스트 스위트를 구성할 수 있습니다. - LLM 친화적: Playwright MCP와 결합하여 LLM 에이전트가 실제 사이트를 탐색하며 테스트 코드를 자동으로 작성하도록 유도하기 매우 쉽습니다.
3. 핵심 프로그래밍 인터페이스: Step과 Verify
Checkset의 테스트는 Ruby 클래스로 정의되며 두 가지 핵심 프리미티브를 사용합니다. - Step: 버튼 클릭, 폼 입력 등 연속적인 동작을 정의합니다. 특정 단계가 실패하면 이후 과정이 무의미하므로 즉시 실행을 중단합니다. - Verify: 상태를 확인하는 단언(Assertion)입니다. 실패하더라도 실행을 중단하지 않고 모든 실패 사례를 수집하여 한 번에 보고하므로 디버깅 효율성을 높여줍니다.
4. 고급 기능: Preps와 Suites
복잡한 테스트 시나리오를 지원하기 위해 다음과 같은 기능을 제공합니다.
- Preps: 체크 실행 전 사전 작업을 수행합니다. 예를 들어 API를 호출하여 테스트용 사용자를 생성하거나 세션을 미리 수립하여 본 테스트가 핵심 로직에만 집중할 수 있게 합니다.
- Suites: checkset.yml 파일을 통해 도메인 구조를 정의합니다. 이를 통해 --domain 옵션 하나만으로 전체 테스트 대상 환경을 손쉽게 전환할 수 있습니다.
5. 실행 및 운영 고려사항
Checkset은 Playwright를 기반으로 하므로 Node.js 환경이 필요합니다. CLI를 통해 병렬 실행(--parallel), 브라우저 가시화(--headed), 실행 속도 조절(--slow-mo) 등의 옵션을 사용할 수 있으며 모든 단계에서 스크린샷을 캡처하여 시각적인 피드백을 제공합니다. 다만 실제 운영 환경에서 실행할 경우 테스트 데이터가 데이터베이스에 남을 수 있으므로 Preps 기능을 통한 적절한 데이터 관리 전략이 필요합니다.