Testing Files Generator
Tiếng Việt

Cách tạo tệp bị hỏng để kiểm thử

Một trình kiểm tra chỉ từng được cho xem tệp lành thì chưa thực sự được kiểm thử. Đây là cách có được một tệp cố ý làm hỏng, ra đúng kích thước bạn yêu cầu và mang theo manifest nói hệ thống của bạn phải làm gì với nó.

Câu trả lời ngắn

tfg generate --format png --size 2mb --damage zero-head --out ./out ghi một tệp PNG đúng 2097152 byte với các byte đầu là số không, và manifest bên cạnh ghi rằng hệ thống của bạn phải từ chối nó.

Cách thường dùng

Vì sao tệp làm hỏng bằng tay là một bài kiểm thử tồi

Cách thường dùng là trình soạn thảo hex, một script đảo vài byte ngẫu nhiên, hoặc cắt ngắn tệp bằng head hay truncate. Dùng được một lần, rồi nó làm bạn tốn công:

Bạn nhận được gì

Tệp bị hỏng vẫn có kích thước bạn đã yêu cầu

Tệp được tạo bình thường rồi mới bị làm hỏng, trên đường ghi xuống đĩa. Nó giữ kích thước bạn yêu cầu, và cùng một lệnh ghi lại đúng các byte đó.

tfg generate --format png --size 2mb --damage zero-head --out ./out
tfg generate --format pdf --size 1mb --count 5 --damage zero-head:bytes=16 --out ./broken

Cài đặt viết sau dấu hai chấm. Tùy chọn có thể lặp lại, và các hỏng hóc được áp dụng theo thứ tự bạn viết. Nó dùng được với từng định dạng trong 26 định dạng.

Nó làm được gì

Có những kiểu hỏng nào?

Đây là danh sách chương trình in ra, được đọc từ chính nó khi trang này được dựng. tfg damage in ra cùng danh sách đó, và tfg damage <id> cho biết một kiểu nhận những gì.

Hỏng hóc Nó làm gì với các byte Tệp nhỏ nhất Cài đặt
zero-head Ghi đè các byte đầu của tệp bằng số không, giữ nguyên độ dài. Hầu hết trình đọc nhìn vào đó trước, nên gần như mọi thứ đều nhận ra hỏng hóc này. 8 bytes

zero-head ghi số không đè lên phần đầu tệp. Hầu hết trình đọc nhìn vào đó trước, vào chữ ký và phần đầu cho biết tệp là gì, nên gần như trình đọc nào cũng nhận ra. Văn bản thuần và nhật ký không có chữ ký và cũng bị từ chối, vì một chuỗi byte không không phải là văn bản. Dưới bốn byte, một số định dạng ra với hỏng hóc mà không trình đọc nào phàn nàn, đó là lý do cài đặt bắt đầu từ bốn.

Manifest nói gì

Một manifest nói điều phải xảy ra

Mỗi tệp bị hỏng nhận một mục nói rằng hệ thống của bạn phải từ chối nó, với hỏng hóc được ghi bên cạnh:

"expected": {
  "outcome": "reject",
  "reason": "content_malformed",
  "confidence": "certain"
},
"damage": [
  {
    "type": "zero-head",
    "settings": {
      "bytes": "8"
    }
  }
]

Hai yêu cầu bị từ chối trước khi có gì được ghi, vì mỗi yêu cầu sẽ để lại trên đĩa một tệp mà manifest mô tả sai:

Trong một công thức

Tệp lành và tệp hỏng trong một lần chạy

Đặt cả hai vào một công thức, và manifest mang kỳ vọng của từng tệp, nên bài kiểm thử không cần danh sách tệp nào là tệp nào:

version: 1
targets:
  - id: healthy
    format: pdf
    size: 1mb
    expected: accept
  - id: broken
    format: pdf
    size: 1mb
    damage:
      - zero-head

Trong một bài kiểm thử

Biến nó thành một bài kiểm thử

Bài kiểm thử đọc manifest và kiểm tra điều đã xảy ra có đúng như điều đã khai báo. Nó không cần danh sách tên tệp:

import json, os

directory = "healthy-and-broken"
manifest = json.load(open(os.path.join(directory, "manifest.json")))

for entry in manifest["files"]:
    response = upload(os.path.join(directory, entry["path"]))
    if entry["expected"]["outcome"] == "reject":
        assert not response.ok
    else:
        assert response.ok

Một lần từ chối tốt là một lần từ chối gọn. Một thông báo nói điều gì sai là câu trả lời bạn muốn. Lỗi máy chủ, treo máy hoặc một tệp lưu dở là khiếm khuyết mà bài kiểm thử này sinh ra để tìm.

Tiếp theo

Đi đâu từ đây