Pentru ce îl folosesc oamenii
Cinci sarcini care apar în aproape orice proiect care primește fișiere de la oameni și comanda care face fiecare. Fiecare exemplu de mai jos rulează așa cum e scris.
Limite de încărcare
Testarea dacă o limită de dimensiune a fișierelor este aplicată acolo unde spune că este
O limită înseamnă trei cazuri de test, nu unul: puțin sub, exact pe ea și puțin peste. Să le faci de mână înseamnă să calculezi numere de octeți și să speri că n-ai greșit cu unu. Cere în schimb setul:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
Primești trei PDF-uri reale de 1048575, 1048576 și 1048577 de octeți și un manifest care spune că
primele două trebuie acceptate, iar al treilea respins pentru size_limit. Testul
tău citește așteptarea în loc să scrii tu trei asertări de mână - iar când limita se schimbă,
schimbi un număr și rulezi din nou.
La fel merge fără presetare când vrei un singur set de limite inline:
tfg generate --format png --boundary 5mb --out ./png-edges
Integrare continuă
Ținerea fixture-urilor în afara repository-ului fără a le pierde
Fixture-urile binare mari fac un repository lent la clonare și incomod la revizuire, și nimeni nu poate spune ce s-a schimbat când una e înlocuită. O rețetă este câteva sute de caractere de YAML care reconstruiesc fișierele identice - octet cu octet, pe orice mașină - pentru că fiecare fișier derivă din seed-ul rulării.
- 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
Fiecare final are propriul cod de ieșire, așa că un pipeline poate deosebi o rețetă proastă de un disc plin și de o nepotrivire la verificare. O rulare eșuată nu tipărește nimic la ieșirea standard, ceea ce împiedică un parser de jurnale să citească o eroare drept date.
Scară
Aflarea a ce se întâmplă când folderul e mare
Rutinele de import, joburile de noapte și listările de directoare se comportă altfel la zece mii de fișiere decât la zece. Dimensiunile extrase dintr-un interval fac setul să semene cu trafic real, nu cu zece mii de fișiere identice, iar extragerea vine din seed, deci setul e același mâine.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Verifică cât ar costa o rulare înainte să scrie ceva, ceea ce contează când totalul se măsoară în gigaocteți:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
O rulare mai mare decât spațiul liber de pe disc este refuzată înainte de a se scrie primul octet, în loc să umple discul și să eșueze pe la jumătate.
Arhive
Testarea unui dezarhivator cu o arhivă care conține cu adevărat fișiere
O arhivă goală cu extensia potrivită nu dovedește nimic despre codul care o deschide și parcurge ce e înăuntru. Declară conținutul și arhiva îl conține cu adevărat:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
Adâncimea de imbricare, numărul de intrări și dimensiunea a ce e înăuntru sunt toate lucruri despre care o rutină de import are păreri, iar așa afli care sunt acele păreri.
Parsere și vizualizatoare
Verificarea că propriul tău cod citește un format cum o face software-ul real
Fiecare format de aici este verificat cu un cititor independent înainte de livrare - un PNG este deschis și pixelii lui comparați, un DOCX este recitit de biblioteci separate, o arhivă este extrasă. Asta înseamnă că un fișier pe care parserul tău îl respinge este o constatare despre parserul tău, nu despre generator.
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
Pagina de formate listează setările pe care le acceptă fiecare format și cel mai mic fișier posibil pentru fiecare.
Ghiduri
Două dintre ele mai în detaliu
- Fișiere de test corupte - un fișier stricat intenționat, de mărime exactă, cu ce trebuie să se întâmple cu el scris în manifest.
- Fișiere de test în CI - un workflow GitHub Actions, un job GitLab și codurile de ieșire care fac un build să eșueze.
Pentru cine este
Ingineri QA, automatizarea testelor și oricine are în spatele codului un formular de încărcare, o rutină de import, un parser sau o cotă de stocare. Rulează pe o mașină fără nicio rețea, ceea ce contează într-un mediu corporativ închis unde un generator din browser nu e o opțiune.
Gratuit și open source, GPL-3.0. Fără cont. Descărcările pentru Windows și macOS sunt semnate și pornesc fără avertisment.