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
- Ia tetap ada di riwayat. Menghapus file biner kemudian tidak mengecilkan klon, karena setiap versinya masih ada.
- Diff tidak menunjukkan apa yang berubah. Peninjau hanya melihat bahwa sebuah PDF berbeda, tidak lebih. Resep berubah satu baris.
- File besar tidak muat. GitHub menolak push yang berisi file lebih dari 100 MB, jadi tes batas unggah 500 MB tidak punya apa pun untuk di-commit.
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:
3- resep tidak valid. Tidak ada yang ditulis, dan setiap masalah disebut4- format tidak bisa melakukan yang diminta, misalnya ukuran di bawah minimumnya6- ruang disk tidak cukup7-tfg verifymenemukan file yang tidak cocok dengan manifesnya8- proses selesai, tetapi tidak semuanya dihasilkan
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
- File uji yang rusak menambahkan file yang sengaja dirusak ke resep yang sama.
- Kasus penggunaan menunjukkan apa lagi yang bisa diperiksa sebuah proses di pipeline.
- Dokumentasi memuat setiap perintah, kunci resep, dan kode keluar.