본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
에이전틱 테스트 환경 엔지니어링

근본 원리

테스트 포트폴리오 운영 모델환경·상태 통제 전략실행 토폴로지와 러너 아키텍처테스트 하네스 엔지니어링

계약 & 구성

인터페이스 계약과 관측 포인트상태 구성과 시나리오 픽스처

실행 & 게이트

실행 패브릭과 오케스트레이션리스크 기반 릴리즈 게이트

신뢰도 & 운영

비결정성과 Flake 관리관측성·신뢰도 지표테스트 인시던트 대응거버넌스와 소유권

부록

런북 템플릿검증 리포트업데이트 내역
핸드북›에이전틱 테스트 환경 엔지니어링›인터페이스 계약과 관측 포인트

인터페이스 계약과 관측 포인트

locator, test id, API schema, domain event, log field를 안정적 테스트 계약으로 다루는 방법

핵심 요약

  • 안정적 테스트 계약은 selector 하나가 아니라 UI·API schema·domain event·log field를 함께 읽는 구조입니다.
  • 브라우저 locator는 getByRole/getByLabel→getByTestId→getByText→CSS/XPath 순으로 우선합니다.
  • data-testid는 DOM 구조가 아니라 사용자 의도를 {도메인}-{화면}-{의도}-{요소}로 네이밍합니다.
  • test id·accessible name·API schema·event payload·trace field 변경은 suite/runner owner가 함께 알아야 합니다.
  • contract 정책은 QA 문서가 아니라 프론트·백엔드·플랫폼 product code review 기준에 들어가야 합니다.

에이전틱 테스트 환경에서 중요한 것은 selector 하나가 아니라 시스템이 어디를 잡고 무엇을 관측하는가라는 계약입니다.

계약 표면을 먼저 정의한다

계약 표면주로 쓰는 probe예시깨졌을 때 문제
접근 가능한 UI contractbrowserrole, label, heading화면은 바뀌었는데 intent를 잃음
stable test idbrowserdata-testidlocator drift, review 난이도 증가
API schema / responseAPI, workflowJSON schema, status code상태 전이와 데이터 무결성 설명 불가
domain eventworkflow, canaryorder.paid, job.completedasync 완료 시점 판단 실패
log / trace fieldincident triagerequest_id, tenant_id, run_id원인 분류 불가

UI 계약만 잘 잡는다고 충분하지 않습니다. agent와 사람이 같은 실패를 해석하려면 UI, API, 이벤트, 로그가 함께 읽히는 구조가 필요합니다.

브라우저 계약의 기본 우선순위

우선순위방식사용 조건비고
1getByRole / getByLabel접근 가능한 UI 요소사용자 관점에 가장 가까움
2getByTestIdrole/label이 불안정하거나 숨겨진 구조계약 필요
3getByText정적 문구, 짧은 CTA다국어·문구 변경 위험
4CSS/XPath구조 선택 외 대안이 없을 때만gate 시나리오 금지 권장

data-testid 네이밍 표준

{도메인}-{화면}-{의도}-{요소}

예시
- billing-checkout-submit-button
- admin-user-list-row
- auth-login-email-input

규칙은 단순합니다.

  • 화면 구조가 아니라 사용자 의도를 이름에 반영합니다.
  • 숫자 index나 DOM 계층 정보를 넣지 않습니다.
  • 공용 컴포넌트 test id는 제품 도메인과 섞지 않습니다.

언제 stable contract를 추가할까

  • role/label만으로 안정적으로 찾기 어려운 커스텀 UI
  • drag and drop, virtualized list, dense table row
  • 텍스트가 자주 바뀌는 버튼/배지/카운터
  • UI 외에도 domain event나 API response를 같이 봐야 하는 async 시나리오

반대로 아래는 stable contract를 남발하지 않습니다.

  • 명확한 role과 accessible name이 이미 있는 요소
  • 텍스트가 제품 정책상 안정적인 CTA
  • purely decorative element

변경 계약

프론트엔드나 플랫폼이 아래를 바꿀 때는 suite owner와 runner owner가 같이 알아야 합니다.

  • data-testid 추가/삭제/이름 변경
  • accessible name이 바뀌는 문구 변경
  • API schema나 event payload field 변경
  • key flow의 DOM 구조, virtualization, lazy loading 방식 변경
  • triage에 쓰는 log / trace field 제거

code review 체크리스트

  • 새 컴포넌트나 API에 어떤 contract를 노출하는지 정의되었는가?
  • browser probe가 role/label 기반으로 먼저 읽을 수 있는가?
  • data-testid가 DOM 구조가 아니라 제품 의도를 반영하는가?
  • async workflow를 UI text만 보고 판단하고 있지 않은가?

권장 운영 방식

contract 정책은 QA 문서가 아니라 프론트엔드, 백엔드, 플랫폼 개발 기준에도 들어가야 합니다. contract를 product code review에서 다루지 않으면 테스트 환경은 항상 뒤늦게 깨집니다.

anti-pattern

  • CSS class 이름을 contract처럼 쓰는 방식
  • nth-child 기반 선택
  • schema/event/log 변경이 제품팀 로컬 판단으로만 끝나는 문화
  • helper 안에 locator와 판정 로직을 숨겨 리뷰에서 보이지 않게 만드는 구조

관련 문서

API 문서 & 스펙

에이전틱 시대의 문서화 혁신 · OpenAPI 3.2, tool schema, MCP Resource까지 연결하는 agent-first API 문서

테스트 하네스 엔지니어링

테스트 코드를 넘어 환경 제어, 증거 수집, 재현성, agent repair boundary를 묶는 테스트 하네스 설계 원칙과 패키지 구조

상태 구성과 시나리오 픽스처

auth/session, data fixture, external sandbox, assertion helper 경계를 테스트 환경 관점에서 정리합니다.

On this page

계약 표면을 먼저 정의한다브라우저 계약의 기본 우선순위data-testid 네이밍 표준언제 stable contract를 추가할까변경 계약code review 체크리스트anti-pattern