Testing Files Generator
한국어

CI 파이프라인에서 테스트 파일을 생성하는 방법

저장소의 바이너리 픽스처는 기록에 영원히 남고, diff에서 검토할 수 없으며, 파일이 커지면 아예 불가능해집니다. 대신 파이프라인 안에서 레시피로 파일을 생성하세요. 레시피는 텍스트이고, 바이트는 매번 같게 나오며, 마지막 단계가 아무것도 움직이지 않았음을 증명합니다.

짧은 답

tfg를 설치하고, 테스트 전에 tfg generate fixtures.yaml --out ./fixtures를, 테스트 후에 tfg verify ./fixtures/manifest.json을 실행하세요. 두 단계 모두 스스로 빌드를 실패시키며, 이유를 알려 주는 종료 코드를 남깁니다.

커밋하지 않는 이유

픽스처가 저장소에 있으면 안 되는 이유

커밋할 것은 레시피입니다. 같은 레시피와 같은 시드는 어느 머신에서나 같은 바이트를 쓰므로, 파이프라인에서 생성한 파일은 노트북에 있던 바로 그 파일입니다.

레시피

테스트 옆에 두는 레시피

이 레시피는 수락되어야 하는 청구서 25건과 한도를 넘어 거부되어야 하는 이미지 2장을 쓰며, 매니페스트는 두 기대 결과를 모두 기록합니다.

version: 1
seed: 7741

targets:
  - id: invoices
    format: pdf
    count: 25
    size: 300kb
    expected: accept

  - id: over_the_limit
    format: png
    count: 2
    size: 12mb
    expected:
      outcome: reject
      reason: size_limit

tfg validate fixtures.yaml은 아무것도 쓰지 않고 레시피를 검사하며 모든 문제를 한 번에 알려 줍니다.

GitHub Actions

도구를 설치하고 픽스처를 만드는 워크플로

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      TFG_VERSION: "0.4.0"
    steps:
      - uses: actions/checkout@v4

      - name: install tfg
        run: |
          base=https://github.com/donislawdev/TestingFilesGenerator/releases/download/v$TFG_VERSION
          curl -fsSLO "$base/tfg_${TFG_VERSION}_linux_amd64.tar.gz"
          curl -fsSLO "$base/verify-SHA256SUMS.txt"
          sha256sum --check --ignore-missing verify-SHA256SUMS.txt
          tar -xzf "tfg_${TFG_VERSION}_linux_amd64.tar.gz" ./tfg
          sudo mv tfg /usr/local/bin/

      - name: build the fixtures
        run: tfg generate fixtures.yaml --out ./fixtures

      - name: run the tests
        run: pytest tests/

      - name: nothing moved
        run: tfg verify ./fixtures/manifest.json

체크섬 줄은 아카이브를 같은 릴리스의 verify-SHA256SUMS.txt와 비교합니다. 버전이 고정되어 있어서 새 릴리스가 손대지 않은 빌드를 바꾸는 일은 없습니다.

GitLab CI

같은 일을 GitLab 작업으로

fixtures:
  image: ubuntu:24.04
  variables:
    TFG_VERSION: "0.4.0"
  script:
    - apt-get update -qq && apt-get install -y -qq curl ca-certificates
    - base=https://github.com/donislawdev/TestingFilesGenerator/releases/download/v$TFG_VERSION
    - curl -fsSLO "$base/tfg_${TFG_VERSION}_linux_amd64.tar.gz"
    - curl -fsSLO "$base/verify-SHA256SUMS.txt"
    - sha256sum --check --ignore-missing verify-SHA256SUMS.txt
    - tar -xzf "tfg_${TFG_VERSION}_linux_amd64.tar.gz" ./tfg
    - ./tfg generate fixtures.yaml --out ./fixtures
    - pytest tests/
    - ./tfg verify ./fixtures/manifest.json

빨갛게 변했을 때

무엇이 단계를 실패시키는지, 그리고 이유

끝나는 방식마다 고유한 종료 코드가 있으므로 단계는 스스로 실패하고 로그가 어느 것인지 알려 줍니다. 파이프라인이 만나는 코드는 다음과 같습니다.

실패한 실행은 표준 출력에 아무것도 출력하지 않으므로 로그 파서가 오류를 데이터로 착각하는 일이 없습니다. 전체 표는 문서 페이지에 있습니다.

PowerShell

PowerShell 스크립트에는 한 줄이 더 필요합니다

PowerShell은 프로그램의 종료 코드를 .ps1 파일 밖으로 전달하지 않습니다. -File로 실행하면 안에 있는 도구가 작업을 거부했더라도 스크립트는 0으로 답하므로, 빨갛게 되어야 할 빌드가 초록이 됩니다. 마지막 한 줄이 수정의 전부입니다.

tfg generate fixtures.yaml --out ./fixtures
exit $LASTEXITCODE

이것은 PowerShell의 동작이지 이 도구와는 무관합니다. cmd, bash, zsh에는 따로 필요한 것이 없습니다.

여러 작업

작업 사이에서 픽스처 공유하기

보통은 업로드할 필요가 없습니다. 같은 레시피가 같은 바이트를 쓰므로 각 작업이 자기 tfg generate를 실행할 수 있고, 이것이 업로드 후 다운로드보다 빠릅니다. 한 작업이 다른 작업에서 파일을 받아야 한다면 전송 후 매니페스트에 tfg verify를 실행하세요. 도착한 것이 기록된 것과 같은지 알려 줍니다.

다음

여기서 어디로