Cum creezi un fișier de dimensiune exactă
Fiecare sistem are o comandă pentru asta, iar toate trei sunt mai jos. Îți dau un fișier cu exact numărul potrivit de octeți - și pentru multe teste atât îți trebuie. Fiecare comandă de pe această pagină a fost rulată înainte de publicare, pe sistemul căruia îi aparține.
Răspunsul scurt
Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name
bs=1M count=10. macOS: mkfile 10m name. Dimensiunile sunt în octeți, iar 10
MB numărați cum numără managerul tău de fișiere sunt 10485760.
Windows
fsutil și o variantă PowerShell care nu are nevoie de nimic în plus
fsutil vine cu Windows. Primește dimensiunea în octeți, așa că
calculează mai întâi numărul - 10 MB sunt 10485760, 100 MB sunt 104857600, 1 GB este 1073741824.
fsutil file createnew test10mb.bin 10485760
Măsurat pe Windows 11: merge dintr-un prompt obișnuit, fără să ceară unul cu privilegii ridicate, iar fișierul iese de exact 10485760 de octeți.
PowerShell poate face același lucru fără să cheme alt program și înțelege unitățile:
$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()
10MB în PowerShell înseamnă 10485760 de octeți, aceeași numărare în baza 1024 pe care o
folosește Explorer, deci cele două comenzi de mai sus produc aceeași dimensiune.
Linux
dd, truncate și fallocate, și diferența care îi prinde pe oameni
dd este cel pe care îl știe toată lumea. Scrie într-adevăr octeții:
dd if=/dev/zero of=test10mb.bin bs=1M count=10
truncate e instantaneu și asta e capcana. Măsurat pe Alpine Linux, fișierul raportează
10485760 de octeți și ocupă zero blocuri - este un fișier rar
(sparse). Tot ce îl citește primește zece megaocteți de zerouri, dar discul nu a cedat niciodată
spațiul:
truncate -s 10M test10mb.bin
E bine pentru a testa o limită de încărcare și înșelător pentru a testa o cotă de disc.
fallocate este cel de folosit când spațiul trebuie să fie real:
fallocate -l 10M test10mb.bin
Și când conținutul trebuie să fie incompresibil, ca un arhivator să nu-l poată strânge la loc:
head -c 10485760 /dev/urandom > test10mb.bin
macOS
mkfile, care nu e rar, și cele două pe care le știi deja
macOS vine cu mkfile. Măsurat pe macOS 26.6.2: 10485760 de octeți și 20480 de blocuri,
deci spațiul este alocat cu adevărat, nu doar promis:
mkfile 10m test10mb.bin
dd și truncate sunt și ele acolo și se comportă ca pe Linux:
dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin
Unde nu mai merge asta
Un fișier de dimensiunea potrivită nu este un fișier de tipul potrivit
Tot ce e mai sus îți dă un bloc de zerouri. Asta ajunge când ce se testează se uită doar la dimensiune - o limită de încărcare, o cotă, un transfer. Nu mai ajunge din clipa în care ceva deschide fișierul.
Măsurat, și merită să încerci singur: fă un fișier de 2 MB cu fsutil, numește-l
photo.png și dă-l unei biblioteci de imagini. Pillow răspunde cannot identify
image file. Nu e un PNG. N-a fost niciodată - doar numele o spunea.
Contează mai mult decât pare, din cauza direcției în care eșuează testul. Endpointul tău de încărcare respinge fișierul, testul tău devine verde și tragi concluzia că limita de dimensiune funcționează. Nu l-a respins pentru dimensiune. L-a respins pentru că octeții nu erau o imagine, iar regula pe care voiai s-o testezi n-a fost niciodată atinsă.
- un parser îl respinge înainte să se uite vreo regulă de dimensiune
- un pas de miniatură eșuează și eroarea pe care o citești e despre miniatură
- un antivirus sau o verificare de conținut îl refuză dintr-un al treilea motiv
- un vizualizator nu arată nimic și nimeni nu poate spune dacă asta e bug-ul
Cealaltă cale
Un fișier real de acel format, la exact dimensiunea cerută
Asta face Testing Files Generator. Fișierul este unul autentic al formatului său - se deschide în programul căruia îi aparține - și are numărul exact de octeți pe care l-ai cerut, la octet:
tfg generate --format png --size 10mb --out ./fixtures
Cere o dimensiune pe care un format nu o poate atinge și primești o eroare care numește pragul și motivul lui, niciodată un fișier de dimensiune greșită. Pagina de formate listează fiecare format cu cel mai mic fișier pe care îl poate produce.
Iar o limită înseamnă trei cazuri de test, nu unul, așa că instrumentul le construiește pe toate trei:
tfg generate --format pdf --boundary 10mb --out ./edges
Asta îți dă 10485759, 10485760 și 10485761 de octeți și un manifest care spune pe care sistemul tău trebuie să le accepte și pe care să le respingă. Pagina de cazuri de utilizare parcurge asta și alte patru sarcini pentru care a fost făcut.
Gratuit și open source, GPL-3.0. Fără cont. Descărcările pentru Windows și macOS sunt semnate și pornesc fără avertisment.
Deci pe care să-l folosești?
-
Folosește comanda sistemului
Când nimic nu deschide fișierul. Testarea unei limite de dimensiune pe un endpoint care verifică întâi dimensiunea, un transfer, o cotă, un disc plin. E o singură linie și e deja instalat.
-
Folosește un generator adevărat
Când ceva analizează, randează, importă sau extrage fișierul - și când ai nevoie de aceleași fixture-uri mâine, pe altă mașină, octet cu octet.
Ambele sunt pe această pagină pentru că ambele au dreptate o parte din timp. Greșeala de evitat este să-l folosești pe primul unde îl trebuie pe al doilea și să citești testul verde drept dovadă.