Testing Files Generator
Bahasa Indonesia

Cara membuat file uji di pipeline CI

Fixture biner di repositori tinggal selamanya dalam riwayatnya, tidak bisa ditinjau di diff, dan menjadi mustahil ketika filenya besar. Buat file di dalam pipeline dari sebuah resep. Resep adalah teks, byte keluar sama setiap kali, dan langkah terakhir membuktikan tidak ada yang bergeser.

Jawaban singkat

Pasang tfg, jalankan tfg generate fixtures.yaml --out ./fixtures sebelum tes dan tfg verify ./fixtures/manifest.json sesudahnya. Kedua langkah menggagalkan build dengan sendirinya, dengan kode keluar yang menyebut alasannya.

Mengapa tidak di-commit

Mengapa fixture tidak seharusnya tinggal di repositori

Yang di-commit adalah resepnya. Resep dan seed yang sama menulis byte yang sama di setiap mesin, jadi file yang dibuat di pipeline adalah file yang Anda punya di laptop.

Resep

Resep yang tinggal di samping tes

Resep ini menulis dua puluh lima faktur yang harus diterima dan dua gambar di atas batas yang harus ditolak, dan manifes mencatat kedua harapan itu:

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 memeriksanya tanpa menulis apa pun, dan menyebut semua masalah sekaligus.

GitHub Actions

Workflow yang memasang alat dan membangun fixture

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

Baris checksum membandingkan arsip dengan verify-SHA256SUMS.txt dari rilis yang sama. Versinya dikunci, jadi rilis baru tidak pernah mengubah build yang tidak Anda sentuh.

GitLab CI

Hal yang sama sebagai job 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

Saat berubah merah

Apa yang membuat sebuah langkah gagal, dan mengapa

Setiap akhir punya kode keluarnya sendiri, jadi langkah gagal dengan sendirinya dan log menyebut yang mana. Yang dijumpai pipeline:

Proses yang gagal tidak mencetak apa pun ke keluaran standar, sehingga parser log tidak pernah salah mengira error sebagai data. Tabel lengkapnya ada di halaman dokumentasi.

PowerShell

Skrip PowerShell butuh satu baris lagi

PowerShell tidak membawa kode keluar sebuah program keluar dari file .ps1. Jalankan satu dengan -File dan skrip menjawab 0 bahkan ketika alat di dalamnya menolak pekerjaan, sehingga build yang seharusnya merah menjadi hijau. Baris terakhir adalah seluruh perbaikannya:

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

Begitulah PowerShell bekerja, bukan sesuatu dari alat ini. cmd, bash, dan zsh tidak butuh tambahan apa pun.

Beberapa job

Berbagi fixture antar job

Biasanya tidak perlu mengunggahnya. Karena resep yang sama menulis byte yang sama, setiap job bisa menjalankan tfg generate sendiri, yang lebih cepat daripada mengunggah lalu mengunduh. Ketika sebuah job harus menerima file dari job lain, jalankan tfg verify pada manifes setelah transfer, dan ia menyatakan apakah yang tiba sama dengan yang ditulis.

Berikutnya

Ke mana dari sini