CI hattında test dosyaları nasıl üretilir
Bir depodaki ikili fixture sonsuza dek geçmişinde kalır, bir diff'te incelenemez ve dosya büyüdüğünde olanaksız hale gelir. Bunun yerine dosyaları hat içinde bir tariften üretin. Tarif metindir, baytlar her seferinde aynı çıkar ve son bir adım hiçbir şeyin kaymadığını kanıtlar.
Kısa yanıt
tfg'yi kurun, testlerden önce tfg generate fixtures.yaml --out ./fixtures,
sonra tfg verify ./fixtures/manifest.json çalıştırın. Her iki adım da derlemeyi
kendiliğinden başarısız kılar ve nedenini söyleyen bir çıkış koduyla bunu yapar.
Neden commit edilmez
Bir fixture neden depoda durmamalı
- Geçmişte kalır. Bir ikili dosyayı sonradan silmek klonu küçültmez, çünkü onun her sürümü hâlâ oradadır.
- Diff neyin değiştiğini göstermez. İnceleyen kişi bir PDF'nin farklı olduğunu görür, başka bir şey değil. Bir tarif ise bir satırla değişir.
- Büyük dosyalar sığmaz. GitHub, 100 MB'ın üzerinde bir dosya içeren bir push'u reddeder. Bu yüzden 500 MB'lık bir yükleme sınırı testinin commit edecek bir şeyi olmaz.
Commit edilecek olan tariftir. Aynı tarif ve aynı tohum her makinede aynı baytları yazar, bu yüzden hatta üretilen dosya dizüstünüzde sahip olduğunuz dosyadır.
Tarif
Testlerin yanında duran bir tarif
Bu tarif, kabul edilmesi gereken yirmi beş fatura ile bir sınırın üzerinde olup reddedilmesi gereken iki görüntü yazar ve bildirim iki beklentiyi de kaydeder:
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 onu hiçbir şey yazmadan denetler ve tüm sorunları tek
seferde adlandırır.
GitHub Actions
Aracı kuran ve fixture'ları oluşturan bir iş akışı
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
Sağlama toplamı satırı arşivi aynı sürümdeki verify-SHA256SUMS.txt ile karşılaştırır.
Sürüm sabitlenmiştir, bu yüzden yeni bir sürüm dokunmadığınız bir derlemeyi asla değiştirmez.
GitLab CI
Aynısı bir GitLab işi olarak
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
Kırmızıya döndüğünde
Bir adımı ne başarısız kılar ve neden
Her sonun kendi çıkış kodu vardır, bu yüzden adım kendiliğinden başarısız olur ve günlük hangisi olduğunu söyler. Bir hattın karşılaştıkları:
3- tarif geçerli değil. Hiçbir şey yazılmadı ve her sorun adlandırıldı4- biçim istenileni yapamıyor, örneğin kendi en küçüğünün altında bir boyut6- yeterli disk alanı yok7-tfg verifybildirimiyle uyuşmayan bir dosya buldu8- çalıştırma bitti ama her şey üretilmedi
Başarısız bir çalıştırma standart çıktıya hiçbir şey yazmaz, bu yüzden bir günlük ayrıştırıcısı hatayı asla veri sanmaz. Tablonun tamamı belgeler sayfasında.
PowerShell
Bir PowerShell betiği bir satır daha ister
PowerShell, bir programın çıkış kodunu bir .ps1 dosyasının dışına taşımaz. Birini
-File ile çalıştırın. İçindeki araç işi reddetse bile betik 0 yanıtı
verir ve kırmızı olması gereken bir derleme yeşile döner. Son satır düzeltmenin tamamıdır:
tfg generate fixtures.yaml --out ./fixtures
exit $LASTEXITCODE
PowerShell böyle davranır, bu aracla ilgili bir şey değildir. cmd, bash ve
zsh fazladan hiçbir şeye gerek duymaz.
Birkaç iş
Fixture'ları işler arasında paylaşmak
Genellikle yüklemeye gerek yoktur. Aynı tarif aynı baytları yazdığı için her iş kendi tfg
generate komutunu çalıştırabilir ve bu, yükleyip indirmekten daha hızlıdır. Bir işin
başka bir işten dosya alması gerekiyorsa, aktarımdan sonra bildirim üzerinde tfg
verify çalıştırın. Gelenin yazılanla aynı olup olmadığını söyler.
Sonraki
Buradan nereye gidilir
- Bozuk test dosyaları aynı tarife kasıtlı bozulmuş dosyalar ekler.
- Kullanım senaryoları bir hat içindeki çalıştırmanın başka neleri denetleyebileceğini gösterir.
- Belgeler her komutu, tarif anahtarını ve çıkış kodunu içerir.