İnsanlar bunu ne için kullanıyor
İnsanlardan dosya kabul eden hemen her projede çıkan beş iş ve her birini yapan komut. Aşağıdaki her örnek yazıldığı gibi çalışır.
Yükleme sınırları
Bir dosya boyutu sınırının söylediği yerde uygulanıp uygulanmadığını test etmek
Bir sınır bir değil üç test durumudur: hemen altı, tam üstü ve hemen üzeri. Bunları elle yapmak bayt sayıları hesaplamak ve bir kayma yapmadığınızı ummak demektir. Bunun yerine seti isteyin:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
1048575, 1048576 ve 1048577 baytlık üç gerçek PDF ve ilk ikisinin kabul edilmesi, üçüncünün
size_limit nedeniyle reddedilmesi gerektiğini söyleyen bir manifest alırsınız.
Testiniz üç assertion'ı elle yazmanız yerine beklentiyi okur - sınır değiştiğinde bir sayıyı
değiştirip yeniden çalıştırırsınız.
Satır içi tek bir sınır seti istediğinizde aynısı hazır ayar olmadan da çalışır:
tfg generate --format png --boundary 5mb --out ./png-edges
Sürekli entegrasyon
Fixture'ları kaybetmeden depodan uzak tutmak
Büyük ikili fixture'lar bir depoyu klonlamada yavaş, incelemede zahmetli yapar ve biri değiştirildiğinde neyin değiştiğini kimse söyleyemez. Tarif, özdeş dosyaları yeniden kuran birkaç yüz karakterlik YAML'dir - bayt bayt, her makinede - çünkü her dosya çalıştırmanın seed'inden türetilir.
- 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
Her sonun kendi çıkış kodu vardır, bu yüzden bir hat kötü bir tarifi dolu bir diskten ve bir doğrulama uyuşmazlığından ayırt edebilir. Başarısız bir çalıştırma standart çıktıya hiçbir şey yazdırmaz, bu da bir günlük ayrıştırıcısının hatayı veri sanmasını önler.
Ölçek
Klasör büyükken ne olduğunu öğrenmek
İçe aktarma rutinleri, gece işleri ve dizin listeleri on bin dosyada ona göre farklı davranır. Bir aralıktan çekilen boyutlar seti on bin özdeş dosya yerine gerçek trafiğe benzetir ve çekiliş seed'den gelir, yani set yarın da aynıdır.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Toplam gigabayt cinsinden ölçülüyorsa önem kazanan şeyi, bir çalıştırmanın bir şey yazmadan önce neye mal olacağını denetleyin:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
Diskteki boş alandan büyük bir çalıştırma, diski doldurup yarıda başarısız olmak yerine ilk bayt yazılmadan önce reddedilir.
Arşivler
Bir açıcıyı gerçekten dosya içeren bir arşivle test etmek
Doğru uzantılı boş bir arşiv, onu açıp içindekini dolaşan kod hakkında hiçbir şey kanıtlamaz. İçeriği bildirin, arşiv onu gerçekten içersin:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
İç içe geçme derinliği, girdi sayıları ve içindekilerin boyutu, bir içe aktarma rutininin görüş sahibi olduğu şeylerdir ve bu görüşlerin ne olduğunu böyle öğrenirsiniz.
Ayrıştırıcılar ve görüntüleyiciler
Kendi kodunuzun bir biçimi gerçek yazılım gibi okuduğunu denetlemek
Buradaki her biçim yayımlanmadan önce bağımsız bir okuyucuyla doğrulanır - bir PNG açılır ve pikselleri karşılaştırılır, bir DOCX ayrı kitaplıklarca geri okunur, bir arşiv çıkarılır. Bu, ayrıştırıcınızın reddettiği bir dosyanın üretici hakkında değil ayrıştırıcınız hakkında bir bulgu olduğu anlamına gelir.
tfg generate --format docx --size 300kb --set paragraphs=120 --out ./documents
tfg generate --format xlsx --size 2mb --set rows=400 --set columns=6 --out ./sheets
Biçimler sayfası her birinin kabul ettiği ayarları ve her birinin olabileceği en küçük dosyayı listeler.
Rehberler
Bunlardan ikisi daha ayrıntılı
- Bozuk test dosyaları - kasıtlı bozulmuş, tam boyutta bir dosya ve ona ne olması gerektiği bildirimde yazılı.
- CI'da test dosyaları - bir GitHub Actions iş akışı, bir GitLab işi ve derlemeyi başarısız kılan çıkış kodları.
Kimler için
QA mühendisleri, test otomasyonu ve kodunun arkasında bir yükleme formu, içe aktarma rutini, ayrıştırıcı veya depolama kotası olan herkes. Hiç ağı olmayan bir makinede çalışır, bu da tarayıcı tabanlı bir üreticinin seçenek olmadığı kapalı bir kurumsal ortamda önem taşır.
Ücretsiz ve açık kaynak, GPL-3.0. Kayıt gerekmez. Windows ve macOS indirmeleri imzalıdır ve uyarı vermeden başlar.