A cosa lo usano le persone
Cinque compiti che ricorrono in quasi ogni progetto che accetta file dalle persone, e il comando che esegue ciascuno. Ogni esempio qui sotto funziona così com'è scritto.
Limiti di upload
Testare se un limite di dimensione dei file è applicato dove dice di esserlo
Un limite sono tre casi di test, non uno: appena sotto, esattamente sul limite e appena sopra. Ottenerli a mano significa calcolare numeri di byte sperando di non sbagliare di uno. Chiedi invece il set:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
Ottieni tre PDF reali da 1048575, 1048576 e 1048577 byte, e un manifest che dice che i primi due
vanno accettati e il terzo rifiutato per size_limit. Il tuo test legge
l'aspettativa invece che tu scriva tre asserzioni a mano - e quando il limite cambia, cambi un
numero e riesegui.
Lo stesso funziona senza preset quando vuoi un singolo set di limiti in linea:
tfg generate --format png --boundary 5mb --out ./png-edges
Integrazione continua
Tenere le fixture fuori dal repository senza perderle
Grandi fixture binarie rendono un repository lento da clonare e scomodo da rivedere, e nessuno sa dire cosa è cambiato quando una viene sostituita. Una ricetta è qualche centinaio di caratteri di YAML che ricostruiscono i file identici - byte per byte, su qualsiasi macchina - perché ogni file deriva dal seed dell'esecuzione.
- 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
Ogni conclusione ha il suo codice di uscita, quindi una pipeline distingue una ricetta sbagliata da un disco pieno e da una discrepanza di verifica. Un'esecuzione fallita non stampa nulla sullo standard output, il che evita che un parser di log legga un errore come dato.
Scala
Scoprire cosa succede quando la cartella è grande
Routine di importazione, job notturni ed elenchi di directory si comportano diversamente con diecimila file che con dieci. Dimensioni estratte da un intervallo fanno sembrare il set traffico reale anziché diecimila file identici, e l'estrazione viene dal seed, quindi il set è lo stesso domani.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Controlla quanto costerebbe un'esecuzione prima che scriva qualsiasi cosa, il che conta quando il totale si misura in gigabyte:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
Un'esecuzione più grande dello spazio libero sul disco viene rifiutata prima che sia scritto il primo byte, invece di riempire il disco e fallire a metà.
Archivi
Testare un decompressore con un archivio che contiene davvero dei file
Un archivio vuoto con l'estensione giusta non dimostra nulla sul codice che lo apre e percorre ciò che c'è dentro. Dichiara il contenuto e l'archivio lo contiene davvero:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
Profondità di annidamento, numero di voci e dimensione di ciò che c'è dentro sono tutte cose su cui una routine di importazione ha opinioni, ed è così che scopri quali sono.
Parser e visualizzatori
Verificare che il tuo codice legga un formato come fa il software reale
Ogni formato qui è verificato con un lettore indipendente prima del rilascio - un PNG viene aperto e i suoi pixel confrontati, un DOCX viene riletto da librerie separate, un archivio viene estratto. Ciò significa che un file che il tuo parser rifiuta è una scoperta sul tuo parser, non sul generatore.
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
La pagina dei formati elenca le impostazioni che ciascuno accetta e il file più piccolo che ciascuno può essere.
Guide
Due di questi più in dettaglio
- File di test corrotti - un file rotto di proposito, della dimensione esatta, con nel manifest ciò che deve succedergli.
- File di test in CI - un workflow GitHub Actions, un job GitLab e i codici di uscita che fanno fallire una build.
Per chi è
Ingegneri QA, automazione dei test e chiunque abbia dietro al proprio codice un modulo di upload, una routine di importazione, un parser o una quota di storage. Gira su una macchina senza alcuna rete, il che conta in un ambiente aziendale chiuso dove un generatore basato su browser non è un'opzione.
Gratuito e open source, GPL-3.0. Nessuna registrazione. I download per Windows e macOS sono firmati e si avviano senza avvisi.