테스트 코드를 다시 쓰지 않는 쪽으로
Playwright 테스트를 읽고, Hermes Agent가 같은 흐름을 실제 스테이징에서 확인하도록 만든 CLI다. 기존 E2E를 대체하기보다 mock 기반 테스트와 실제 화면 사이의 빈틈을 메우는 용도로 만들었다.
mock 값과 selector를 그대로 재생하면 작은 문구 변경에도 쉽게 깨진다. 그래서 테스트 코드에서는 사용자 의도만 뽑고, 화면을 읽는 일은 Agent에게 맡겼다.
Playwright spec → QA 시나리오 → 스테이징 탐색 → 판정과 근거
주석으로 실행 범위 정하기
새 DSL을 만들지 않고 기존 테스트에 짧은 주석만 더한다.
// @qa-page: dashboard
import { expect, test } from "@playwright/test";
// @qa-live-policy: readonly
test("shows the current plan", async ({ page }) => {
await expect(page.getByTestId("plan-name")).toBeVisible();
});
CLI는 spec을 읽어 시나리오를 만들고, Agent가 남긴 화면 근거와 함께 pass, fail, manual_review, skip 중 하나로 정리한다.
이 도구의 철학
테스트는 실행 스크립트이기 전에 의도의 원본이다
Playwright 코드를 스테이징에서 그대로 재생하지 않는다. mock 값과 selector는 CI에서는 유용하지만 실제 데이터 앞에서는 쉽게 낡는다. spec에서 “사용자가 무엇을 볼 수 있어야 하는가”만 꺼내 라이브 시나리오로 바꾼다.
결정적인 테스트는 그대로 둔다
Playwright CI와 API 계약 테스트가 기본 회귀 검증이다. Agent는 실제 데이터, 문구, DOM 상태처럼 매번 달라질 수 있는 부분을 살피는 보조 수단이다. 둘 중 하나를 고르는 구조가 아니다.
애매함도 하나의 결과다
AI 판정에서 가장 걱정한 건 그럴듯한 오답이었다. 근거가 부족하면 pass나 fail로 몰아가지 않고 manual_review로 넘긴다. 모른다는 상태를 숨기지 않는 편이 잘못된 통과보다 낫다고 봤다.
안전 범위는 추론에 맡기지 않는다
각 테스트에 readonly, safe-interaction-no-confirm 같은 정책을 적는다. 결제·구독 변경과 mock 인증 흐름은 차단하고, 자격 증명은 설정 파일이나 CLI 인자가 아닌 환경 변수로 전달한다.
판정보다 근거를 남긴다
결과는 Markdown과 JSON으로 저장한다. 어떤 화면을 보고 왜 그렇게 판단했는지 나중에 다시 확인할 수 있어야 한다. review 단계도 저장된 판단을 다시 읽으며, 브라우저를 한 번 더 열지 않는다.
맡기지 않은 일
spec → abstract-ai → judge → review → slack 흐름을 npm 패키지와 CLI로 공개했다. 야간 QA에 붙일 수 있지만, 결정적인 회귀 테스트나 API 계약 테스트를 대신하지는 않는다.