Testing Files Generator
Italiano

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

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.