Testing Files Generator
Türkçe

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:

BayrakNe 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-runsay ve göster, hiçbir şey yazma
--jsonmanifesti 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ı:

Üçü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.

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.