
Quando si sviluppa o si testa un’applicazione che lavora con file, prima o poi arriva la necessità di disporre di campioni con caratteristiche molto precise. Un modulo di caricamento potrebbe avere un limite di 10 MB, un parser potrebbe dover gestire documenti particolarmente grandi oppure un processo automatico potrebbe essere chiamato a elaborare migliaia di file contemporaneamente.
In questi scenari, creare manualmente i file necessari può diventare un’attività sorprendentemente laboriosa. Non basta infatti cambiare l’estensione di un file o riempirlo con dati casuali: per molti test è necessario che il documento sia realmente valido e possa essere aperto dal programma associato.
Testing Files Generator nasce proprio per affrontare questo tipo di esigenza. Il progetto è pensato per sviluppatori, tester e professionisti del controllo qualità che hanno bisogno di generare rapidamente file reali, scegliendo il formato e la dimensione desiderata.
Uno degli aspetti più interessanti è la precisione nella gestione delle dimensioni. Se viene richiesta una dimensione di 10 MB, il programma produce un file della dimensione prevista esattamente, arrivando al singolo byte. Questo permette di effettuare test particolarmente utili quando un’applicazione deve rispettare limiti di upload o quote di archiviazione.
Il progetto supporta inoltre la generazione di 24 formati differenti, distribuiti tra documenti, immagini, file di testo, markup, archivi e audio. I file prodotti non sono semplici contenitori con un’estensione modificata, ma documenti effettivamente riconoscibili dai software compatibili.
Tra i formati disponibili troviamo PDF, DOCX, XLSX e PPTX, insieme a PNG, JPEG, BMP, GIF, ICO, SVG, TIFF, WebP, AVIF e JXL. Per testo e markup sono disponibili TXT, Markdown, CSV, JSON, XML, HTML e LOG, mentre per gli archivi troviamo ZIP e TAR.GZ. È presente anche il formato WAV.
Test riproducibili e scenari al limite
Testing Files Generator punta molto sulla riproducibilità, un requisito importante quando i file di test vengono utilizzati in ambienti differenti. Utilizzando la stessa configurazione e lo stesso seed, il programma può generare gli stessi dati byte per byte su macchine diverse.
Questo approccio consente di evitare repository pieni di grandi file binari. È possibile conservare invece una piccola ricetta di generazione e ricreare i fixture quando servono, anche all’interno di una pipeline di sviluppo.
Un’altra funzione interessante riguarda i test sui limiti. Il programma può creare automaticamente un insieme di file posizionati attorno a una soglia, permettendo di verificare il comportamento di un’applicazione con un valore immediatamente inferiore, con il valore esatto e con quello immediatamente superiore. È un metodo particolarmente efficace per individuare errori di tipo off-by-one.
La generazione può inoltre essere eseguita su larga scala. Un singolo comando può produrre migliaia di file, accompagnandoli con un manifest che descrive ciò che il sistema dovrebbe fare con ciascun elemento. Questo rende più semplice trasformare i file generati in veri casi di test automatizzati.
Il manifest è infatti una delle caratteristiche più utili del progetto. Oltre al file vero e proprio, il sistema fornisce informazioni sull’esito atteso, evitando di dover definire manualmente ogni asserzione durante la preparazione dei test.
Le impostazioni possono essere adattate al formato utilizzato. Per le immagini, ad esempio, è possibile intervenire sulle dimensioni e sulla qualità JPEG; per i PDF si può specificare il numero di pagine; per i fogli di calcolo è possibile configurare righe e colonne; per gli archivi si può determinare cosa inserire al loro interno.
Testing Files Generator tra GUI, CLI e integrazione continua
Il progetto mette a disposizione sia un’interfaccia grafica sia una CLI, permettendo di scegliere il metodo più adatto al proprio flusso di lavoro. La GUI può risultare comoda per creare rapidamente alcuni file durante una sessione di test, mentre il terminale è particolarmente indicato per automazioni, script e pipeline CI.
L’integrazione con ambienti di continuous integration è uno degli scenari per cui Testing Files Generator può risultare particolarmente interessante. Il programma dispone di codici di uscita, output leggibile dalle macchine e un comportamento pensato per evitare messaggi indesiderati sullo standard output quando una generazione termina con un errore.
Anche la gestione dei file prodotti è stata considerata. Il comando verify permette di controllare che non siano stati modificati elementi esterni alla generazione, mentre cleanup può eliminare precisamente ciò che è stato creato dal programma.
Un altro elemento importante per chi lavora in ambienti aziendali o con pipeline isolate è il funzionamento completamente offline. Il progetto non richiede account, servizi cloud, telemetria o controlli automatici degli aggiornamenti. La versione CLI è progettata senza uno stack di rete compilato al suo interno.
Tra gli scenari più interessanti rientrano quindi:
- verificare i limiti di dimensione di un sistema di upload;
- testare parser e visualizzatori con documenti realmente validi;
- creare migliaia di file per verificare processi batch;
- generare archivi contenenti numerosi documenti;
- preparare file di grandi dimensioni senza conservarli nel repository;
- riprodurre gli stessi fixture su computer differenti;
- integrare la generazione direttamente nei test automatici.
Il progetto è distribuito con licenza GPL-3.0 e i file generati possono essere utilizzati liberamente. Sono inoltre previste ulteriori estensioni del numero di formati supportati, con 7z, MP3 e MP4 indicati tra quelli in arrivo.
Testing Files Generator è un progetto ancora in fase di sviluppo viene rilasciato per Linux con binari precompilati oltre al codice sorgente, abbiamo testato il software su Ubuntu 26.04 LTS.
Per chi sviluppa applicazioni che ricevono, elaborano, archiviano o trasferiscono file, Testing Files Generator rappresenta quindi uno strumento pratico per trasformare la preparazione dei dati di test da un’attività manuale a un processo ripetibile e automatizzabile.