Testing Files Generator

Do czego ludzie tego używają

Pięć zadań, które pojawiają się w prawie każdym projekcie przyjmującym pliki od ludzi, i polecenie robiące każde z nich. Wszystkie przykłady niżej działają tak, jak są napisane.

Limity uploadu

Sprawdzenie, czy limit rozmiaru pliku działa dokładnie tam, gdzie jest zadeklarowany

Limit to trzy przypadki testowe, nie jeden: tuż pod, dokładnie na granicy i tuż nad. Robienie ich ręcznie znaczy liczenie bajtów i liczenie na to, że nie pomyliłeś się o jeden. Poproś o cały zestaw:

tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges

Dostajesz trzy prawdziwe PDF-y o rozmiarach 1048575, 1048576 i 1048577 bajtów oraz manifest mówiący, że dwa pierwsze mają być przyjęte, a trzeci odrzucony z powodu size_limit. Test czyta oczekiwanie, zamiast żebyś pisał trzy asercje ręcznie - a gdy limit się zmieni, zmieniasz jedną liczbę i uruchamiasz ponownie.

To samo działa bez presetu, gdy chcesz pojedynczy zestaw graniczny od ręki:

tfg generate --format png --boundary 5mb --out ./png-edges

Ciągła integracja

Trzymanie danych testowych poza repozytorium bez tracenia ich

Duże pliki binarne spowalniają klonowanie repozytorium i utrudniają przegląd, a przy podmianie jednego z nich nikt nie widzi, co się właściwie zmieniło. Przepis to kilkaset znaków YAML-a, które odtwarzają identyczne pliki - co do bajta, na dowolnej maszynie - bo każdy plik jest wyprowadzony z ziarna przebiegu.

- 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

Każde zakończenie ma własny kod wyjścia, więc potok odróżni zły przepis od pełnego dysku i od niezgodności przy weryfikacji. Nieudany przebieg nie pisze nic na standardowym wyjściu, co chroni parser logów przed wzięciem błędu za dane.

Skala

Sprawdzenie, co się dzieje, gdy katalog robi się duży

Import danych, nocne zadania i listowanie katalogu zachowują się inaczej przy dziesięciu tysiącach plików niż przy dziesięciu. Rozmiary losowane z zakresu sprawiają, że zestaw wygląda jak prawdziwy ruch, a nie jak dziesięć tysięcy identycznych plików - a losowanie idzie z ziarna, więc jutro zestaw będzie ten sam.

tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures

Sprawdź, ile przebieg będzie kosztował, zanim cokolwiek zapisze - to ma znaczenie, gdy suma liczy się w gigabajtach:

tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run

Przebieg większy niż wolne miejsce na dysku jest odrzucany przed zapisaniem pierwszego bajtu, zamiast zapełnić dysk i paść w połowie.

Archiwa

Testowanie rozpakowywania archiwum, które naprawdę coś zawiera

Puste archiwum z właściwym rozszerzeniem nie dowodzi niczego o kodzie, który je otwiera i chodzi po zawartości. Zadeklaruj zawartość, a archiwum naprawdę ją niesie:

targets:
  - id: bundle
    format: zip
    contains:
      - format: txt
        count: 200
        size: 4kb

Głębokość zagnieżdżenia, liczba wpisów i rozmiar tego, co jest w środku, to rzeczy, o których import danych ma swoje zdanie - a to jest sposób, żeby się dowiedzieć, jakie.

Parsery i przeglądarki

Sprawdzenie, czy Twój kod czyta format tak jak prawdziwe oprogramowanie

Każdy format tutaj jest sprawdzany niezależnym czytnikiem, zanim trafi do wydania - PNG jest otwierany, a jego piksele porównywane, DOCX jest odczytywany przez osobne biblioteki, archiwum jest rozpakowywane. To znaczy, że plik odrzucony przez Twój parser jest znaleziskiem o Twoim parserze, a nie o generatorze.

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

Strona formatów wypisuje ustawienia przyjmowane przez każdy z nich i najmniejszy plik, jaki każdy potrafi zrobić.

Dla kogo to jest

Dla inżynierów QA, automatyzacji testów i każdego, kogo kod ma za sobą formularz uploadu, import danych, parser albo limit miejsca. Działa na maszynie bez sieci, co ma znaczenie w zamkniętym środowisku firmowym, gdzie generator w przeglądarce nie wchodzi w grę.

Darmowe i otwarte, GPL-3.0. Bez zakładania konta. Binarki nie są jeszcze podpisane, więc system ostrzeże przy pierwszym uruchomieniu - nota wydania mówi dokładnie, czego się spodziewać.