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.
- bộ phân tích từ chối nó trước khi xét bất kỳ quy tắc kích thước nào
- bước tạo ảnh thu nhỏ hỏng và lỗi bạn đọc là về ảnh thu nhỏ
- phần mềm diệt virus hoặc bước kiểm tra nội dung từ chối nó vì lý do thứ ba
- trình xem không hiện gì, và không ai biết đó có phải lỗi hay không
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?
-
Dùng lệnh của hệ thống
Khi không có gì mở tệp. Kiểm thử giới hạn kích thước trên endpoint kiểm tra kích thước trước, một lần truyền, một hạn ngạch, tình trạng đầy đĩa. Chỉ một dòng và đã được cài sẵn.
-
Dùng một trình tạo thật
Khi có thứ gì phân tích, kết xuất, nhập hoặc giải nén tệp - và khi ngày mai bạn cần cùng các fixture đó, trên máy khác, từng byte.
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.