본문으로 건너뛰기

10.1 Tag, Annotation, Filtering

Tag는 실행 대상을 선택하고 report를 분류하는 안정된 metadata입니다. File path와 test title만으로 운영 정책을 표현하면 directory 개편이나 copy 수정에 쉽게 깨집니다.

Tag 설계 축

용도
속도@smoke, @regressionPR/nightly 범위
제품 영역@auth, @billingownership, filter
test 성격@visual, @a11y, @destructive환경, artifact 정책
외부 의존@payments-sandboxsecret, service availability

한 test에 tag를 너무 많이 붙이면 의미가 약해집니다. 조직이 실제로 filtering이나 reporting에 사용하는 축만 유지합니다.

test('사용자가 로그인한다', {
tag: ['@smoke', '@auth'],
annotation: {
type: 'requirement',
description: 'AUTH-LOGIN-001',
},
}, async ({ page }) => {
// ...
});

실행 filtering

npx playwright test --grep @smoke
npx playwright test --grep-invert @visual
npx playwright test --grep '(?=.*@auth)(?=.*@smoke)'

Tag는 @로 시작합니다. Shell마다 quoting 규칙이 다르므로 CI script에서는 regex를 quote하고 같은 command를 local에서도 재현합니다.

Built-in annotation의 의미

  • test.skip() — 해당 조건에서 적용할 수 없어 실행하지 않음
  • test.fixme() — 알려진 문제로 실행 비용이나 crash 위험 때문에 실행하지 않음
  • test.fail() — 실행하며 실패가 현재 예상임을 명시
  • test.slow() — timeout budget을 늘려야 하는 의도적 slow case
test('WebKit 전용 제한', async ({ page, browserName }) => {
test.skip(browserName !== 'webkit', 'WebKit behavior만 검증');
// ...
});

skip은 결함의 묘지가 되기 쉽습니다. Issue, owner, 만료일을 annotation이나 관리 시스템에 연결합니다.

Runtime annotation

test('주문을 만든다', async ({ page }, testInfo) => {
testInfo.annotations.push({
type: 'environment',
description: process.env.TEST_ENV ?? 'local',
});
});

Credential이나 개인 식별자를 annotation에 넣으면 report와 artifact를 통해 노출될 수 있습니다.

실습

  1. Lab test에 @smoke, @network, @visual tag를 부여합니다.
  2. Smoke만 10초 안에 실행하는 command를 만듭니다.
  3. Known issue에 fixme 대신 fail이 맞는 경우를 구분합니다.
  4. HTML report에서 annotation이 어떻게 보이는지 확인합니다.

참고: Annotations, Playwright Test API