Testing Files Generator
Čeština

Jak vytvořit soubor přesné velikosti

Každý systém na to má příkaz a všechny tři jsou níže. Dají vám soubor s přesně správným počtem bajtů - a pro mnoho testů je to vše, co potřebujete. Každý příkaz na této stránce byl před zveřejněním spuštěn na systému, kam patří.

Krátká odpověď

Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name bs=1M count=10. macOS: mkfile 10m name. Velikosti jsou v bajtech a 10 MB počítané tak, jak je počítá váš správce souborů, je 10485760.

Windows

fsutil a verze v PowerShellu, která nepotřebuje nic navíc

fsutil je součástí Windows. Bere velikost v bajtech, takže si číslo nejdřív spočítejte - 10 MB je 10485760, 100 MB je 104857600, 1 GB je 1073741824.

fsutil file createnew test10mb.bin 10485760

Změřeno na Windows 11: funguje z běžného příkazového řádku a nepotřebuje zvýšená oprávnění a soubor vyjde přesně na 10485760 bajtů.

PowerShell umí totéž bez volání jiného programu a rozumí jednotkám:

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

10MB v PowerShellu znamená 10485760 bajtů, tedy stejné počítání po 1024 jako Průzkumník, takže oba příkazy výše vytvoří stejnou velikost.

Linux

dd, truncate a fallocate a rozdíl, který lidi chytí

dd zná každý. Bajty skutečně zapisuje:

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

truncate je okamžitý, a to je ten háček. Změřeno na Alpine Linuxu: soubor hlásí 10485760 bajtů a zabírá nula bloků - je to řídký soubor. Cokoli, co ho čte, dostane deset megabajtů nul, ale disk místo nikdy neuvolnil:

truncate -s 10M test10mb.bin

To stačí k testu limitu nahrávání a klame to při testu diskové kvóty. fallocate je ten správný, když musí být místo skutečné:

fallocate -l 10M test10mb.bin

A když musí být obsah nestlačitelný, aby ho archivátor nemohl znovu zmenšit:

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

macOS

mkfile, který není řídký, a dva, které už znáte

macOS dodává mkfile. Změřeno na macOS 26.6.2: 10485760 bajtů a 20480 bloků, takže místo je skutečně přiděleno, ne jen slíbeno:

mkfile 10m test10mb.bin

dd a truncate tam jsou také a chovají se jako na Linuxu:

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

Kde to přestává stačit

Soubor správné velikosti není soubor správného druhu

Vše výše vám dá blok nul. To stačí, když testovaná věc hledí jen na velikost - limit nahrávání, kvótu, přenos. Přestane to stačit ve chvíli, kdy soubor cokoli otevře.

Změřeno a stojí za to to zkusit samostatně: vytvořte pomocí fsutil soubor o 2 MB, pojmenujte ho photo.png a předejte ho knihovně pro obrázky. Pillow odpoví cannot identify image file. Není to PNG. Nikdy nebylo - tvrdil to jen název.

To je důležitější, než to zní, kvůli tomu, jakým směrem test pak selže. Váš endpoint pro nahrávání soubor odmítne, váš test zezelená a vy usoudíte, že limit velikosti funguje. Neodmítl ho kvůli velikosti. Odmítl ho proto, že bajty nebyly obrázek, a pravidlo, které jste chtěli otestovat, nebylo nikdy dosaženo.

Druhá cesta

Skutečný soubor toho formátu, v přesně té velikosti, o kterou jste požádali

To je to, co dělá Testing Files Generator. Soubor je pravý soubor svého formátu - otevře se v programu, kam patří - a má přesný počet bajtů, o který jste požádali, na bajt:

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

Požádejte o velikost, které formát nedosáhne, a dostanete chybu, která pojmenuje minimum a jeho důvod, nikdy soubor špatné velikosti. Stránka formátů uvádí každý formát s nejmenším souborem, který umí vytvořit.

A limit jsou tři testovací případy, ne jeden, takže nástroj sestaví všechny tři:

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

To vám dá 10485759, 10485760 a 10485761 bajtů a manifest, který říká, které má váš systém přijmout a které odmítnout. Stránka případů použití to probírá spolu se čtyřmi dalšími úlohami, pro které je určen.

Zdarma a open source, GPL-3.0. Žádná registrace. Stažené soubory pro Windows a macOS jsou podepsané a spustí se bez varování.

Tak který použít?

Oba jsou na této stránce, protože oba mají část času pravdu. Chybou, které je třeba se vyhnout, je použít první tam, kde je třeba druhý, a číst zelený test jako důkaz.