Testing Files Generator
Italiano

Come creare un file di dimensione esatta

Ogni sistema ha un comando per farlo, e tutti e tre sono qui sotto. Ti danno un file con esattamente il numero giusto di byte - e per molti test è tutto ciò che serve. Ogni comando di questa pagina è stato eseguito prima della pubblicazione, sul sistema a cui appartiene.

La risposta breve

Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name bs=1M count=10. macOS: mkfile 10m name. Le dimensioni sono in byte, e 10 MB contati come li conta il tuo file manager sono 10485760.

Windows

fsutil, e una versione PowerShell che non richiede nulla di extra

fsutil è incluso in Windows. Prende la dimensione in byte, quindi calcola prima il numero - 10 MB sono 10485760, 100 MB sono 104857600, 1 GB è 1073741824.

fsutil file createnew test10mb.bin 10485760

Misurato su Windows 11: funziona da un prompt normale senza richiederne uno con privilegi elevati, e il file esce di esattamente 10485760 byte.

PowerShell può fare lo stesso senza chiamare un altro programma, e capisce le unità:

$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()

10MB in PowerShell significa 10485760 byte, lo stesso conteggio in base 1024 che usa Esplora risorse, quindi i due comandi qui sopra producono la stessa dimensione.

Linux

dd, truncate e fallocate, e la differenza che frega le persone

dd è quello che conoscono tutti. Scrive davvero i byte:

dd if=/dev/zero of=test10mb.bin bs=1M count=10

truncate è istantaneo, ed è questa la trappola. Misurato su Alpine Linux, il file riporta 10485760 byte e occupa zero blocchi - è un file sparso. Qualsiasi cosa lo legga ottiene dieci megabyte di zeri, ma il disco non ha mai ceduto lo spazio:

truncate -s 10M test10mb.bin

Va bene per testare un limite di upload ed è fuorviante per testare una quota di disco. fallocate è quello da usare quando lo spazio deve essere reale:

fallocate -l 10M test10mb.bin

E quando il contenuto deve essere incomprimibile, così un archiviatore non può ridurlo di nuovo:

head -c 10485760 /dev/urandom > test10mb.bin

macOS

mkfile, che non è sparso, e i due che conosci già

macOS include mkfile. Misurato su macOS 26.6.2: 10485760 byte e 20480 blocchi, quindi lo spazio è davvero allocato invece che promesso:

mkfile 10m test10mb.bin

Ci sono anche dd e truncate, e si comportano come su Linux:

dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin

Dove questo smette di funzionare

Un file della dimensione giusta non è un file del tipo giusto

Tutto quanto sopra ti dà un blocco di zeri. Basta quando ciò che è sotto test guarda solo la dimensione - un limite di upload, una quota, un trasferimento. Smette di bastare nel momento in cui qualcosa apre il file.

Misurato, e vale la pena provarlo di persona: crea un file da 2 MB con fsutil, chiamalo photo.png e passalo a una libreria di immagini. Pillow risponde cannot identify image file. Non è un PNG. Non lo è mai stato - lo diceva solo il nome.

Conta più di quanto sembri, per via di come il test fallisce a quel punto. Il tuo endpoint di upload rifiuta il file, il tuo test diventa verde e concludi che il limite di dimensione funziona. Non lo ha rifiutato per la dimensione. Lo ha rifiutato perché i byte non erano un'immagine, e la regola che volevi testare non è mai stata raggiunta.

L'altra strada

Un file reale di quel formato, della dimensione esatta che hai chiesto

È ciò che fa Testing Files Generator. Il file è un vero file del suo formato - si apre nel programma che gli appartiene - e ha l'esatto numero di byte che hai chiesto, al byte:

tfg generate --format png --size 10mb --out ./fixtures

Chiedi una dimensione che un formato non può raggiungere e ottieni un errore che nomina il minimo e il suo motivo, mai un file della dimensione sbagliata. La pagina dei formati elenca ogni formato con il file più piccolo che può produrre.

E un limite sono tre casi di test anziché uno, quindi lo strumento li costruisce tutti e tre:

tfg generate --format pdf --boundary 10mb --out ./edges

Ti dà 10485759, 10485760 e 10485761 byte, e un manifest che dice quali il tuo sistema deve accettare e quali rifiutare. La pagina dei casi d'uso ripercorre questo e altri quattro compiti per cui è pensato.

Gratuito e open source, GPL-3.0. Nessuna registrazione. I download per Windows e macOS sono firmati e si avviano senza avvisi.

Quindi, quale usare?

Entrambi sono su questa pagina perché entrambi hanno ragione una parte del tempo. L'errore da evitare è usare il primo dove serve il secondo e leggere il test verde come una prova.