Dokümantasyon
Aracın yaptığı her şey, insanların gerçekten geldiği sorular şeklinde düzenlendi. Depodaki README tam başvurudur ve her zaman indirdiğiniz sürümle eşleşir.
Hangi komutlar var?
Her biri tek bir iş yapar:
tfg generate tariften veya bayraklardan dosya üret
tfg validate bir tarifi denetle, hiçbir şey yazma
tfg verify bir dizini bir manifeste göre denetle
tfg cleanup bir manifestin listelediği dosyaları sil
tfg recipe fmt bir tarifi oturmuş biçiminde yazdır
tfg preset adlandırılmış bir test sorusundan dosya seti oluştur
tfg formats bu sürümün desteklediği biçimleri listele
tfg damage bu sürümün bir dosyayı kasıtlı bozma yollarını listele
tfg tool elinizdeki dosyalar için küçük araçlar
tfg version araç sürümünü yazdır
tfg license lisansı ve üretilen dosyalar için anlamını yazdır
Tam boyutta tek bir dosyayı nasıl üretirim?
Biçimi, boyutu ve nereye gideceğini söyleyin. Boyutlar 1024'lerle sayılır, yani 2mb
2097152 bayttır. Düz bir bayt sayısı da olur, yani --size 10485761 tam o kadarını
ister.
tfg generate --format png --size 2mb --out ./out
generate için işe yarar bayraklar:
| Bayrak | Ne yapar |
|---|---|
--format <id> | dosyaların biçimi, örneğin txt |
--size <size> | her dosyanın tam boyutu, 10mb gibi veya düz bir bayt sayısı |
--size-range <a-b> | bir aralıktan dosya başına çekilen boyut, 1kb-8kb gibi. Çekiliş seed'den gelir |
--boundary <size> | bir sınırın çevresinde üç dosya: bir bayt altı, sınırın kendisi, bir bayt üstü |
--count <n> | kaç dosya üretileceği. Varsayılan 1 |
--name <template> | ad şablonu, örneğin invoice_{index:04}.txt |
--out <dir> | yazılacak dizin |
--seed <n> | çalıştırmanın seed'i. Aynı seed aynı baytları verir |
--set <k>=<v> | bir biçim ayarı, tekrarlanabilir |
--damage <name> | dosyaları kasıtlı bozar, tekrarlanabilir ve sırayla uygulanır. Liste için tfg damage çalıştırın |
--expected <outcome> | accept, reject, sanitize veya unspecified |
--dry-run | say ve göster, hiçbir şey yazma |
--json | manifesti standart çıktıya yaz |
Kasıtlı bozuk bir dosyayı nasıl yaparım?
Bu aracın yazdığı diğer her dosya yapısı gereği doğrudur ve bu, bir yükleme doğrulayıcısının sorduğu
üç sorudan ikisini yanıtlar. --damage üçüncüsünü yanıtlar - dosya hiç açılıyor mu.
Dosya normal üretilir, sonra bozulur, böylece hâlâ istediğiniz boyuttadır.
tfg generate --format png --size 2mb --damage zero-head --out ./out
tfg generate --format png --size 2mb --damage zero-head:bytes=16 --out ./out
Ayarlar iki noktadan sonra gelir. Bayrak tekrarlanır ve yazdığınız sıra uygulanma sırasıdır.
tfg damage bu sürümün neler yapabildiğini ve her birinin ne aldığını listeler.
Bir tarifte anahtar, adlardan veya ayarlardan oluşan bir listedir:
targets:
- id: broken
format: png
count: 5
size: 2mb
damage:
- zero-head
- type: zero-head
bytes: 16
Hasarlı bir dosya manifestte expected: reject alır, hasar yanında kaydedilir. İki şey
bir şey yazılmadan önce reddedilir, çünkü her biri aksi hâlde diske manifestin yanlış tarif
ettiği bir dosya koyardı:
- hasarın gerektirdiğinden küçük bir dosya, çünkü değişmeden çıkardı
-
bir hasarın yanında
expected: accept, çünkü hiçbir şey bunu karşılayamaz. Test edilen sistemin dosyayı onarması amaçlanıyorsasanitize, sorduğunuz soru buysaunspecifiedyazın
Üçüncüsü önceden bilinemez. Bir hasar çalışıp hiçbir baytı oynatmazsa o dosya yazılmak yerine atılır - çalıştırma sürer, hangi dosya olduğunu söyler ve kısmi çıkış koduyla biter.
Adım adım, bildirimi okuyan bir testle: test için bozuk dosya nasıl yapılır.
Bir tarif nasıl görünür?
Tarif, tüm bir çalıştırmayı anlatan bir YAML dosyasıdır. Testlerinizin yanına commit edin, fixture'lar deponuzda ikili dosya olmaktan çıkar - herkes onları birkaç yüz karakterlik bir dosyadan bayt bayt yeniden kurabilir.
# fixtures.yaml
version: 1
seed: 7741
defaults:
label: true
targets:
- id: invoices
format: pdf
count: 25
size: 300kb
name: invoice_{index:04}.pdf
properties:
pages: 3
page_size: a4
expected: accept
- id: over_the_limit
format: png
count: 2
size: 12mb
expected:
outcome: reject
reason: size_limit
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
output:
dir: ./fixtures
manifest: manifest.json
tfg validate fixtures.yaml
tfg generate fixtures.yaml
Her target, size, size-range, boundary veya
contains anahtarlarından tam birine ihtiyaç duyar. İkisi hatadır, hiçbiri de öyle.
Geçersiz bir tarif hiç dosya yazmaz ve yalnızca ilkini değil tüm sorunları bir
seferde bildirir, her biri ilgili ayarı adlandırır.
Sistemimin bir dosyayla ne yapması gerektiğini nasıl bildiririm?
Sonuç yeterliyse kısa biçim, neden önemliyse uzun biçim:
expected: accept
expected:
outcome: reject
reason: size_limit
Sonuçlar accept, reject, sanitize ve
unspecified. Nedenler, bir rapor onlara göre gruplayabilsin diye kapalı bir
listedir: content_malformed, count_limit,
dimensions_limit, duplicate, encoding_invalid,
extension_rule, filename_invalid, filename_too_long,
filename_traversal, malware_signature, mime_mismatch,
nesting_depth, none, size_limit ve
size_zero.
Bir neden söz konusu kuralı adlandırır, hükmü değil. Bu yüzden aynı neden iki
sonucun altında da durabilir - sınırın bir bayt altındaki dosya accept olur ve söz
konusu kural yine size_limit kalır.
Manifestte ne var?
Her çalıştırmanın sonunda, kesilen çalıştırma dahil, dosyaların yanına yazılır. Dosya başına bir girdi:
{
"manifest_version": "1.0",
"tool": { "name": "testing-files-generator", "version": "0.4.0" },
"run": {
"id": "run_b359aa8d94",
"seed": 0,
"command": "tfg generate --format png --size 2mb --out ./out",
"platform": { "os": "windows", "arch": "amd64" },
"complete": true
},
"summary": {
"file_count": 1,
"total_bytes": 2097152,
"by_format": { "png": 1 },
"by_expected": { "unspecified": 1 }
},
"files": [
{
"path": "files_0001.png",
"bytes": 2097152,
"format": "png",
"fidelity": "full",
"determinism": "byte",
"seed": "8dc2d18c",
"hashes": { "sha256": "1a1f7c..." },
"properties": { "width": 640, "height": 480 },
"expected": {
"outcome": "unspecified",
"detail": "No expectation was declared for this file.",
"confidence": "policy_dependent"
}
}
]
}
Çalıştırma bir tariften geldiyse bir recipe_hash, bir hazır ayardan geldiyse
overrides ile birlikte preset eklenir, böylece bir manifest her zaman
onu üreten şeye kadar izlenebilir.
Her girdi ayrıca dosyayı üreten tarifteki hedefin kimliği olan target_id taşır ve
summary.by_target her hedefin kaç dosyaya vardığını sayar. Birkaç hedefli bir tarif
böylece dosya adlarını okumadan hedef hedef denetlenebilir.
Hazır ayar nedir?
Yaygın bir test sorusunu yanıtlayan hazır bir dosya seti, böylece seti kendiniz tasarlamanız
gerekmez. Hazır ayarlar altta sıradan tariflerdir ve eject tarifi yazdırır, oradan
düzenleyebilirsiniz. Her hazır ayarın genelde ne bulduğunu, sette ne olduğunu ve kabul ettiği
her ayarı anlatan kendi sayfası vardır.
-
Biçimin izin verdiği kadar küçük, geçerli bir dosya geçer mi?
empty-and-minimal -
Sistemim beklemediği bir dosya adını saklayıp gösterecek ve geri verecek mi?
filename-handling -
Bir boyut sınırı tam bildirildiği yerde uygulanıyor mu?
size-boundaries -
Tablo içe aktarmam gerçek araçların dışa aktardıklarına dayanıyor mu?
tabular-import -
Okuyucum bir dosyanın hangi kodlamada olduğunu biliyor mu, yoksa tahmin mi ediyor?
text-encoding -
Yükleme formum alması gerekeni alıp geri kalanı reddediyor mu?
upload-validation
tfg preset list
tfg preset show size-boundaries
tfg generate --preset size-boundaries --limit 10mb --out ./edges
tfg preset eject size-boundaries > my.yaml
show, seti kurmadan önce neye mal olacağını söyler ve bir sayının sizin sınırınız değil
bizim geçici değerimiz olduğunu açıkça belirtir.
Çıkış kodları ne anlama gelir?
Her sonun kendi kodu vardır, makine tarafından okunabilir çıktı standart çıktıya gider ve başarısız bir çalıştırma orada hiçbir şey yazdırmaz. Tablo dondurulmuş bir sözleşmedir - bir kodun anlamını değiştirmek büyük sürüm artışı gerektirir.
| Kod | Anlamı |
|---|---|
0 |
Her şey çalıştı. |
1 |
Araç içinde beklenmeyen bir hata. |
2 |
Yanlış komut veya bayrak. |
3 |
Tarif geçerli değil. |
4 |
Biçim istenen şeyi yapamıyor. |
5 |
Bir okuma veya yazma başarısız oldu. |
6 |
Yeterli disk alanı yok. |
7 |
verify bir uyuşmazlık buldu. |
8 |
Çalıştırma bitti ama her şey üretilmedi. |
130 |
Ctrl+C ile kesildi. |
143 |
Bir sinyalle durduruldu, CI zaman aşımı böyle görünür. |
- 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
Ctrl+C ile durdurulan bir çalıştırma yine bir manifest bırakır ve asla yarım yazılmış bir dosya bırakmaz, böylece iptal edilen bir işi bir sonraki temizleyebilir.
GitHub Actions ve GitLab CI için hazır iş akışları: CI hattında test dosyaları nasıl üretilir.
Masaüstü penceresi var mı?
Evet, betiklenmeyen test için üzerine bir pencere konmuş aynı motor. Kırpılmış bir sürüm değildir: bir test iki arayüzü yetenek yetenek karşılaştırır ve yalnızca birinin yapabildiği her şey sessizce ayrışmak yerine bildirilip gerekçelendirilmelidir.
Ekranlar tek bir grup, hazır ayarlar, aynı anda birkaç grup ve hakkında. Bir çalıştırmanın neye mal olacağını bir şey yazmadan önce gösterir, çalışırken ilerlemeyi bildirir ve yarım yazılmış dosya bırakmadan yarıda iptal edilebilir. Henüz bir tarif dosyası açmaz - tarifler şimdilik komut satırının işidir ve pencere gruplarını formda kurar.