Testing Files Generator
Tiếng Việt

Cách tạo tệp có kích thước chính xác

Hệ thống nào cũng có một lệnh cho việc này, và cả ba nằm bên dưới. Chúng cho bạn một tệp có đúng số byte cần thiết - và với nhiều bài kiểm thử, thế là đủ. Mọi lệnh trên trang này đã được chạy trước khi đăng, trên hệ thống mà nó thuộc về.

Câu trả lời ngắn

Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name bs=1M count=10. macOS: mkfile 10m name. Kích thước tính bằng byte, và 10 MB đếm theo cách trình quản lý tệp của bạn đếm là 10485760.

Windows

fsutil, và một bản PowerShell không cần thêm gì

fsutil có sẵn trong Windows. Nó nhận kích thước bằng byte, nên hãy tính số trước - 10 MB là 10485760, 100 MB là 104857600, 1 GB là 1073741824.

fsutil file createnew test10mb.bin 10485760

Đo trên Windows 11: nó chạy từ một dấu nhắc thường mà không cần quyền nâng cao, và tệp ra đúng 10485760 byte.

PowerShell làm được điều tương tự mà không gọi chương trình khác, và hiểu đơn vị:

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

10MB trong PowerShell nghĩa là 10485760 byte, cùng cách đếm cơ số 1024 mà Explorer dùng, nên hai lệnh ở trên cho cùng một kích thước.

Linux

dd, truncate và fallocate, và sự khác biệt làm người ta vấp

dd là lệnh ai cũng biết. Nó thật sự ghi các byte:

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

truncate chạy tức thì, và đó là cái bẫy. Đo trên Alpine Linux, tệp báo 10485760 byte và chiếm không khối nào - nó là một tệp thưa. Bất cứ thứ gì đọc nó nhận mười megabyte số không, nhưng đĩa chưa bao giờ nhường chỗ:

truncate -s 10M test10mb.bin

Điều đó ổn để kiểm thử giới hạn tải lên và gây hiểu lầm khi kiểm thử hạn ngạch đĩa. fallocate là lệnh nên dùng khi dung lượng phải là thật:

fallocate -l 10M test10mb.bin

Và khi nội dung phải không nén được, để trình nén không thể ép nó nhỏ lại:

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

macOS

mkfile, không phải tệp thưa, và hai lệnh bạn đã biết

macOS có sẵn mkfile. Đo trên macOS 26.6.2: 10485760 byte và 20480 khối, nên dung lượng thật sự được cấp phát chứ không chỉ hứa hẹn:

mkfile 10m test10mb.bin

dd và truncate cũng có và hoạt động như trên Linux:

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

Khi điều này ngừng hiệu quả

Tệp đúng kích thước không phải tệp đúng loại

Mọi thứ ở trên cho bạn một khối số không. Điều đó đủ khi thứ được kiểm thử chỉ nhìn kích thước - giới hạn tải lên, hạn ngạch, một lần truyền. Nó thôi đủ ngay khi có thứ gì mở tệp.

Đã đo, và đáng để tự làm: tạo tệp 2 MB bằng fsutil, đặt tên photo.png rồi đưa cho một thư viện ảnh. Pillow trả lời cannot identify image file. Nó không phải PNG. Nó chưa bao giờ là - chỉ cái tên nói vậy.

Điều đó quan trọng hơn vẻ ngoài, vì bài kiểm thử sau đó hỏng theo hướng nào. Endpoint tải lên từ chối tệp, bài kiểm thử của bạn xanh và bạn kết luận giới hạn kích thước hoạt động. Nó không từ chối vì kích thước. Nó từ chối vì các byte không phải ảnh, và quy tắc bạn định kiểm thử chưa bao giờ được chạm tới.

Con đường còn lại

Một tệp thật của định dạng đó, đúng kích thước bạn đã yêu cầu

Đây là việc Testing Files Generator làm. Tệp là tệp thật của định dạng - mở được bằng phần mềm của nó - và có đúng số byte bạn đã yêu cầu, chính xác đến từng byte:

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

Yêu cầu kích thước mà định dạng không thể đạt và bạn nhận một lỗi nêu mức sàn cùng lý do, không bao giờ là tệp sai kích thước. Trang định dạng liệt kê mỗi định dạng cùng tệp nhỏ nhất nó có thể tạo.

Và một giới hạn là ba trường hợp kiểm thử chứ không phải một, nên công cụ dựng cả ba:

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

Điều đó cho bạn 10485759, 10485760 và 10485761 byte, cùng manifest nói tệp nào hệ thống của bạn nên chấp nhận và tệp nào nên từ chối. Trang trường hợp sử dụng đi qua việc đó và bốn việc khác mà nó được làm ra để giải quyết.

Miễn phí, mã nguồn mở, GPL-3.0. Không cần đăng ký. Bản tải cho Windows và macOS đã được ký nên khởi động không cảnh báo.

Vậy nên dùng cái nào?

Cả hai đều có trên trang này vì cả hai đúng trong một phần thời gian. Sai lầm cần tránh là dùng cái đầu ở nơi cần cái sau và coi bài kiểm thử xanh là bằng chứng.