테스트 문서를 테스트 코드로 작성하기 – webapp-test-code-generator 스킬 소개

테스트 문서는 열심히 작성했는데, 매번 테스트 코드로 변환하는 게 귀찮으셨나요? 이제 AI가 대신 해드립니다.

이 글에서는 webapp-test-docs-writer로 작성한 테스트 문서를 Playwright/Jest 테스트 코드로 자동 변환하는 Claude Code 스킬 webapp-test-code-generator를 소개합니다.


TL;DR

  • 테스트 문서(TC-*)를 실행 가능한 테스트 코드로 자동 변환
  • Playwright (E2E/API) 및 Jest/Vitest (Unit/Integration) 지원
  • 프레임워크 자동 감지로 적절한 템플릿 적용
  • GitHub 저장소: greeun/webapp-test-code-generator

왜 이 스킬이 필요한가?

테스트 문서와 테스트 코드 사이의 간극

QA 프로세스에서 테스트 문서 작성과 테스트 코드 구현은 별개의 작업입니다. 보통 다음과 같은 흐름을 거칩니다:

기존 테스트 워크플로우: 요구사항 분석에서 테스트 문서 작성, 테스트 코드 구현까지 수작업으로 진행
기존 테스트 워크플로우 – 각 단계가 수작업으로 진행됨

문제점

문제설명영향
반복 작업같은 내용을 문서와 코드에 두 번 작성시간 낭비
불일치 위험문서와 코드가 달라지는 경우 발생품질 저하
생산성 저하단순 변환 작업에 시간 소모개발 지연
일관성 부족개발자마다 다른 테스트 스타일유지보수 어려움

해결책: 자동화된 테스트 코드 생성

새로운 워크플로우: webapp-test-docs-writer에서 webapp-test-code-generator로 AI 자동화
새로운 워크플로우 – AI가 변환 작업을 자동화

스킬 구조

워크플로우

4단계 자동 변환 프로세스: Parse, Detect, Generate, Write
4단계 자동 변환 프로세스

지원 테스트 유형

테스트 ID유형프레임워크출력 파일
TC-E2E-*E2E 테스트Playwright*.spec.ts
TC-API-*API 테스트Playwright*.api.spec.ts
TC-UNIT-*단위 테스트Jest / Vitest*.test.ts
TC-INT-*통합 테스트Jest / Vitest*.integration.test.ts
TC-SEC-*보안 테스트Playwright*.security.spec.ts

프레임워크 자동 감지

스킬은 프로젝트 설정 파일을 분석하여 적절한 테스트 프레임워크를 자동으로 선택합니다:

프레임워크 자동 감지 로직: 설정 파일 기반으로 Playwright, Jest, Vitest 선택
프레임워크 자동 감지 로직

입력 형식

webapp-test-docs-writer가 생성하는 표준 테스트 문서 형식을 입력으로 받습니다:

## TC-API-001: User login with valid credentials

| Item | Content |
|------|---------|
| **Priority** | Critical |
| **Preconditions** | - User exists in DB<br>- API server running |
| **Test Data** | `{"email": "te**@*****le.com", "password": "Pass123!"}` |

### Test Steps

| # | Step | Expected Result |
|---|------|-----------------|
| 1 | POST /api/auth/login with credentials | 200 OK |
| 2 | Check response body | Contains accessToken |
| 3 | Verify token validity | Token is valid JWT |

입력 요소 매핑

문서 요소코드 변환예시
TC-* IDtest() 함수명test('TC-API-001: ...')
PreconditionsbeforeEach() 훅beforeEach(async () => {...})
Test Steps순차 실행 코드// Step 1: POST...
Expected Resultsexpect() 단언expect(status).toBe(200)
Test Data테스트 픽스처const data = {...}

출력 예시

API 테스트 (Playwright)

import { test, expect } from '@playwright/test';

test.describe('Login - Normal Login', () => {
  test('TC-API-001: User login with valid credentials', async ({ request }) => {
    const credentials = {
      email: 'te**@*****le.com',
      password: 'Pass123!'
    };

    // Step 1: POST /api/auth/login
    const response = await request.post('/api/auth/login', {
      data: credentials
    });
    expect(response.status()).toBe(200);

    // Step 2: Check response body
    const body = await response.json();
    expect(body).toHaveProperty('accessToken');

    // Step 3: Verify token validity
    expect(body.accessToken.split('.').length).toBe(3);
  });
});

E2E 테스트 (Playwright)

import { test, expect } from '@playwright/test';

test.describe('Login Page - E2E', () => {
  test.beforeEach(async ({ page }) => {
    await page.goto('/login');
  });

  test('TC-E2E-001: Redirect to main page after successful login', async ({ page }) => {
    await page.fill('[name="email"]', 'te**@*****le.com');
    await page.fill('[name="password"]', 'Pass123!');
    await page.click('button[type="submit"]');
    await expect(page).toHaveURL('/main');
  });
});

Unit 테스트 (Jest)

import { describe, test, expect } from '@jest/globals';
import { validateEmail } from '../utils/validators';

describe('Email Validator', () => {
  test('TC-UNIT-001: Validate correct email format', () => {
    expect(validateEmail('te**@*****le.com')).toBe(true);
  });

  test('TC-UNIT-002: Validate incorrect email format', () => {
    expect(validateEmail('invalid-email')).toBe(false);
  });
});

생성되는 파일 구조

project/
├── tests/
│   ├── docs/                     # 테스트 문서 (입력)
│   │   └── login-test-cases.md
│   │
│   ├── e2e/                      # E2E 테스트
│   │   └── login.spec.ts
│   │
│   ├── api/                      # API 테스트
│   │   └── auth.api.spec.ts
│   │
│   ├── unit/                     # 단위 테스트
│   │   └── validators.test.ts
│   │
│   └── integration/              # 통합 테스트
│       └── auth.integration.test.ts
│
└── playwright.config.ts          # 프레임워크 설정

사용법

설치

# 저장소 클론
git clone https://github.com/greeun/webapp-test-code-generator.git

# 심볼릭 링크 생성
ln -sf "$(pwd)/webapp-test-code-generator" ~/.claude/skills/webapp-test-code-generator

트리거 키워드

다음 키워드로 스킬을 활성화할 수 있습니다:

언어키워드
Englishtest code, implement tests, generate tests
한글테스트 코드 생성, 테스트 구현, TC-* 구현

실제 사용 예시

사용 흐름

1단계: 테스트 문서 작성
“로그인 기능 테스트 케이스 작성해줘”
→ webapp-test-docs-writer 활성화
→ tests/docs/login-test-cases.md 생성

2단계: 테스트 코드 생성
“작성된 테스트 문서로 테스트 코드 생성해줘”
→ webapp-test-code-generator 활성화
→ tests/e2e/login.spec.ts 생성

3단계: 테스트 실행
npx playwright test tests/e2e/login.spec.ts


관련 스킬

스킬역할연계
webapp-test-docs-writer테스트 시나리오/케이스 문서 작성입력 제공
webapp-test-code-generator테스트 코드 생성 (현재 스킬)변환
smart-test-runner테스트 실행 및 실패 재시도실행
webapp-testingPlaywright 기반 웹앱 테스트도구

1. 테스트 문서 품질이 코드 품질을 결정합니다

  • 명확한 전제조건 작성
  • 구체적인 테스트 데이터(JSON) 포함
  • 단계별 예상 결과 명시

2. 생성된 코드는 시작점입니다

  • 인증 헬퍼 함수 추가
  • 공통 fixture 분리
  • 환경별 설정 적용

3. 스킬 연계 활용

webapp-test-docs-writerwebapp-test-code-generatorsmart-test-runner 순서로 사용하면 테스트 작성부터 실행까지 자동화됩니다.


효과

지표BeforeAfter개선
테스트 코드 작성 시간30분/케이스5분/케이스83% 감소
문서-코드 일관성수동 검증자동 보장100% 보장
코드 스타일 통일개발자별 상이템플릿 기반표준화

링크


마치며

webapp-test-code-generator는 테스트 문서 작성과 테스트 코드 구현 사이의 반복적인 변환 작업을 자동화합니다. webapp-test-docs-writer와 함께 사용하면 테스트 워크플로우 전체를 AI로 가속화할 수 있습니다.

테스트 자동화의 첫 걸음, 지금 시작해보세요!

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤