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ć.