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

근본 원리

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

계약 & 구성

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

실행 & 게이트

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

신뢰도 & 운영

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

부록

런북 템플릿검증 리포트업데이트 내역
핸드북›에이전틱 테스트 환경 엔지니어링›상태 구성과 시나리오 픽스처

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

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

핵심 요약

  • fixture는 편의성 도구가 아니라 누가 어떤 상태를 책임지고 만들었는지 드러내는 상태 조립 계층입니다.
  • base runtime·identity·domain state·external sandbox·assertion helper로 책임을 계층화합니다.
  • 로그인 UI는 인증 probe에만 남기고 나머지는 재사용 storageState를 기본으로 둡니다.
  • fixture가 DB 직접 조작·sleep·retry를 숨겨 flake 원인을 가리지 않도록 합니다.
  • 시나리오는 Given/When/Then이 로그만 봐도 읽히고 실패 원인 하나에 가깝게 유지합니다.

fixture는 편의성 도구가 아니라 상태 조립 계층입니다. 에이전틱 테스트 환경에서는 fixture가 많아질수록 추상화보다 어떤 상태를 누구 책임으로 만들었는가를 드러내는 일이 중요해집니다.

권장 계층

계층책임예시
base runtime브라우저/클라이언트 공용 설정locale, timezone, baseURL
identity fixture로그인 상태와 권한admin, member, readonly
domain state fixture데이터 생성과 도메인 헬퍼order 생성, subscription 시작
external sandbox fixture결제/이메일/provider stubsandbox customer, test inbox
assertion helper재사용 가능한 검증 조합toast 확인, table row 검증

브라우저 러너 예시

Playwright를 쓴다면 fixture는 이 정도 책임 분리면 충분합니다.

import { test as base } from '@playwright/test'

type Fixtures = {
  adminPage: import('@playwright/test').Page
}

export const test = base.extend<Fixtures>({
  adminPage: async ({ browser }, use) => {
    const context = await browser.newContext({
      storageState: 'auth/admin.json',
    })
    const page = await context.newPage()
    await use(page)
    await context.close()
  },
})

여기서 중요한 건 fixture가 "관리자 페이지를 편하게 연다"가 아니라 어떤 identity state를 어떤 boundary에서 제공하는가를 분명히 밝히는 것입니다.

auth / session 운영 원칙

  • 로그인 UI는 인증 경로를 검증하는 probe에만 남기고 나머지는 재사용 상태를 기본으로 합니다.
  • 관리자, 일반 사용자, 권한 제한 사용자 상태를 분리합니다.
  • 만료 토큰, 강제 로그아웃, MFA는 전용 시나리오로 분리합니다.
  • shared 환경에서 계정 잠금이나 rate limit을 유발하지 않도록 account pool을 둡니다.

fixture가 감추면 안 되는 것

  • DB 직접 조작을 일반 helper 뒤에 숨기는 것
  • 여러 도메인에 걸친 비즈니스 규칙을 한 fixture가 떠안는 것
  • 긴 준비 절차 전체를 "한 줄 magic helper"로 감추는 것
  • sleep과 retry를 fixture 내부에 묻어 flake 원인을 안 보이게 하는 것

시나리오 작성 규칙

  1. probe 제목에 비즈니스 의도를 넣습니다.
  2. Given/When/Then 흐름은 로그만 봐도 읽혀야 합니다.
  3. 시나리오 하나는 실패 원인 하나에 가깝게 유지합니다.
  4. 여러 assertion을 넣더라도 같은 release 의미를 가지는 것끼리만 묶습니다.

리뷰 체크리스트

  • fixture가 실제 실패 원인을 숨기지 않는가?
  • identity, domain state, external sandbox 책임이 섞여 있지 않은가?
  • cleanup 또는 TTL 전략이 명확한가?
  • browser probe와 API/workflow probe가 동일한 seed vocabulary를 공유하는가?

anti-pattern

  • global fixture에서 모든 데이터를 자동 생성
  • one-size-fits-all page object
  • helper 한 줄로 10개의 비즈니스 단계를 감추는 구조
  • 시나리오보다 fixture가 더 큰 권한을 갖는 상태

관련 문서

환경·상태 통제 전략

preview, integration, prod-like, sandbox와 seed·clock·queue·reset 전략을 테스트 환경 표준으로 만드는 방법

비결정성과 Flake 관리

flaky를 타이밍 문제가 아니라 환경·상태·외부 의존성·모델 분산의 운영 신호로 다루는 방법

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

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

실행 패브릭과 오케스트레이션

PR, main, nightly, release, canary, agent-repair 루프를 어떤 시간 예산과 증거 정책으로 운영할지 설명합니다.

On this page

권장 계층브라우저 러너 예시auth / session 운영 원칙fixture가 감추면 안 되는 것시나리오 작성 규칙리뷰 체크리스트anti-pattern