본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 25. 22:43

내가 테스트 데이터를 하드코딩하는 것을 그만두고 AI 기반 pytest fixture 생성기를 만든 이유

요약

테스트 데이터 하드코딩과 Faker의 무작위성 문제를 해결하기 위해 AI 기반 pytest fixture 생성기인 FixtureForge를 개발했습니다. 이 도구는 스키마를 이해하며, 개발 시에는 풍부한 데이터를 생성하고 CI 환경에서는 결정론적으로 동작하도록 설계되었습니다.

핵심 포인트

  • AI를 활용해 유니코드, 경계값 등 다양한 엣지 케이스 데이터 생성 가능
  • 시드 값을 활용한 결정론적 모드로 CI/CD 환경에서의 테스트 안정성 확보
  • 사용자 정의 스키마를 이해하고 pytest 플러그인 형태로 간편하게 사용
  • OpenAI 등 멀티 프로바이더 지원 및 대량 데이터 생성을 위한 DataSwarm 기능 제공

내가 계속 마주쳤던 문제

모든 프로젝트. 모든 코드베이스. 똑같은 상황:

def test_user_registration():
    user = {
        "name": "John Doe",
...

작동합니다. 통과합니다. 그리고 정확히 하나의 데이터 경로, 즉 지루한 영어 데이터가 포함된 해피 패스 (happy path)만을 테스트합니다.

다음과 같은 경우는 어떨까요:

  • name = "张伟" — 당신의 시스템은 유니코드 (Unicode)를 처리할 수 있습니까?
  • age = 0 또는 age = 150 — 경계값 (boundary values)?
  • email = "user+tag@sub.domain.co.uk" — 유효하지만 특이한 형식?

직접 작성하지 않는 한 이런 것들을 테스트할 일은 없습니다. 아무도 그렇게 하지 않죠.

"Faker를 사용하라"는 답변도 통하지 않습니다

from faker import Faker
fake = Faker()

...

Faker는 훌륭합니다. 하지만 무작위적 (random)입니다. 즉, 당신의 CI 파이프라인도 무작위로 실패하게 된다는 뜻입니다. 또한 Faker는 맥락 (context)을 이해하지 못합니다. 적대적 엣지 케이스 (adversarial edge cases)를 생성하지 못하며, 당신의 스키마 (schema)를 알지 못합니다.

내가 실제로 원했던 것

나는 다음과 같은 fixture를 원했습니다:

  1. 개발 시에는 AI로 생성 (AI-generated) 되어 풍부하고, 다양하며, 놀라운 데이터를 제공할 것
  2. CI에서는 결정론적 (deterministic) 일 것 — API 키가 필요 없으며 매 실행마다 동일한 데이터를 사용할 것
  3. 단순한 무작위 값이 아닌 나의 스키마 (my schema) 를 이해할 것
  4. pytest 플러그인 (pytest plugin) 으로 작동하여 보일러플레이트 (boilerplate)가 없을 것

그래서 나는 FixtureForge를 만들었습니다.

작동 방식

pip install fixtureforge

기본 사용법 — API 키가 필요 없습니다:

from fixtureforge import forge

@forge(schema={"name": str, "email": str, "age": int})
...

이것은 기본적으로 결정론적 모드 (deterministic mode) 로 실행됩니다. 시드 (Seed) 값은 42입니다. 매번 동일한 데이터가 생성됩니다.

어떤 프로바이더 (provider) 키든 설정하여 AI를 추가할 수 있습니다:

@forge(
    schema={"name": str, "email": str, "age": int},
    prompt="Edge cases: Unicode names, boundary ages (0, 1, 150), malformed-but-valid emails"
...

DataSwarms — 대량 생성

from fixtureforge import DataSwarm

swarm = DataSwarm(
...

CI/CD 통합

# .github/workflows/test.yml
- name: Run tests
  env:
...

CI에는 AI 키가 없습니다. 자동으로 감지하여 결정론적 모드로 전환(fallback)합니다. 테스트는 안정적입니다.

멀티 프로바이더 지원 (Multi-provider support)

# OpenAI
forge(provider="openai", model="gpt-4o-mini")

...

ForgeMemory — 테스트 간 컨텍스트 유지 (context across tests)

from fixtureforge import ForgeMemory

memory = ForgeMemory()
...

현재 상태

FixtureForge는 PyPI에서 v2.2.0 버전으로 제공됩니다. 아직 초기 단계이며, 저는 활발하게 개발 중이고 진심 어린 피드백을 기다리고 있습니다.

만약 제대로 작동하지 않거나, API가 부적절하다고 느껴지거나, 제가 다루지 못한 사용 사례(use case)가 있다면 — 이슈(issue)를 생성하거나 여기에 댓글을 남겨주세요.

pip install fixtureforge

GitHub | PyPI

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0