產生大小精確的真實測試檔案
PDF、PNG、DOCX、ZIP,共 26 種格式,每一種都是能在對應軟體中開啟的真實檔案,大小恰好等於你的要求。每次執行還會寫下你的應用程式應該如何處理每個檔案。命令列加桌面視窗,免費開源,完全在你的電腦上執行。
免費開源,GPL-3.0。無需註冊。Windows 與 macOS 的下載檔已簽署,啟動時不會出現警告。
-
26
種真實格式,每一種都能在對應軟體中開啟
-
1 位元組
你要求的每個大小都精確無誤,絕不默默四捨五入
-
0
個對外連線,無帳號、無遙測、無更新檢查
問題所在
做一個測試檔案很容易,做出對的一千個才是麻煩所在
你在測試接收使用者檔案的軟體。遲早你會需要:
- 一個恰好 10 MB 的 PDF,用來弄清上傳限制是否真實
- 位於該限制兩側的三個檔案,用來抓出差一錯誤
- 10,000 個記錄檔,用來看夜間工作在資料夾很大時會怎樣
- 一個真正包含 200 份文件的 ZIP,而不是只有正確副檔名的空殼
- 一個 4 GB 的檔案,同時不必在儲存庫裡保存 4 GB 的檔案
- 筆電與建置伺服器上完全相同的 fixture,逐位元組一致
這正是它要取代的。它為 QA 工程師、測試自動化,以及程式碼背後有上傳表單、匯入程式、剖析器或儲存配額的所有人而做。
它的與眾不同之處
其他產生器止步於位元組。這個工具回答你的測試真正要問的問題
一個滿是檔案的資料夾仍然要你自己判斷每個檔案應該證明什麼。這裡每次執行都會在檔案旁寫出一個
manifest.json,它是所產生內容的簡單清單,並為每一項給出宣告的預期。
假設你的上傳端點允許 1 MB。請求恰好位於這條線上的三個檔案:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
| 檔案 | 位元組 | 你的系統應該 | 原因 |
|---|---|---|---|
1mb_under_1b.pdf | 1048575 | 接受 | 在限制之內 |
1mb_at_limit.pdf | 1048576 | 接受 | 限制本身是允許的 |
1mb_over_1b.pdf | 1048577 | 拒絕 | size_limit |
三個檔案,三種不同的答案,以機器可讀的形式給出。你的測試讀取清單,而不是由你手寫斷言:
import json, os
directory = "edges"
manifest = json.load(open(os.path.join(directory, "manifest.json")))
for entry in manifest["files"]:
response = upload(os.path.join(directory, entry["path"]))
outcome = entry["expected"]["outcome"]
if outcome == "accept":
assert response.ok, entry["path"]
elif outcome == "reject":
assert not response.ok, entry["path"]
當答案取決於你自己的政策時,清單會如實說明
它記錄的是 unspecified,而不是憑空捏造預期。會猜測的產生器會製造誤報,而總是誤報的測試套件最終會被關掉。
預設集
選好問題,拿到整組檔案
預設集是圍繞一個測試問題設計的測試檔案組,你不必自己琢磨哪些檔案能證明什麼。每個預設集都有一個頁面,說明它通常能發現什麼、組合裡有什麼,以及它接受的每項設定。
-
一個合法且達到格式允許最小大小的檔案能通過嗎?
empty-and-minimal -
我的系統能否正確儲存、顯示並傳回它沒料到的檔名?
filename-handling -
大小限制是否恰好在宣告的位置生效?
size-boundaries -
我的表格匯入能應付真實工具匯出的內容嗎?
tabular-import -
我的讀取器知道檔案是什麼編碼,還是在猜?
text-encoding -
我的上傳表單是否接受該接受的,並拒絕其餘的?
upload-validation
快速開始
三個指令,看它如何運作
-
產生一個檔案
一個 PNG,恰好兩 MB:
tfg generate --format png --size 2mb --out ./fixtures -
產生大量檔案
一萬個記錄檔,每個介於 1 到 8 KB 之間,大小由種子抽取,因此明天會得到同樣的檔案組。給每次執行一個獨立的目錄,清單是一次執行所寫內容的唯一記錄,所以工具拒絕在其上再寫第二份:
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./logs -
先檢查,再刪除
verify告訴你沒有任何變動。cleanup只刪除寫出的內容,不動其他任何東西:tfg verify ./logs/manifest.json tfg cleanup ./logs/manifest.json --yes
大小以 1024 進位計算,與你的檔案管理員一致,所以 2mb 代表 2097152
位元組。直接寫位元組數也可以。文件涵蓋配方、清單與結束碼。
你將得到什麼
為無人看管的測試套件而生
-
精確大小,精確到位元組
要求 10485761 位元組,就得到恰好這麼多。格式無法達到的大小會得到附上原因的錯誤,絕不會得到大小錯誤的檔案。
-
26 種真實格式
不是帶副檔名的填充零。產生的 PNG 能在圖片檢視器中開啟,DOCX 能在 Word 中開啟,ZIP 能解壓縮。每種格式在發布前都經過獨立讀取器驗證。
-
本身就是測試依據的清單
路徑、大小、SHA-256、格式、種子、工具版本,以及你的系統應該如何處理該檔案。
-
可重現
配方與種子相同,位元組就相同,在任何電腦上都一樣。提交一個小小的 YAML 配方,而不是龐大的二進位 fixture。
-
兩種介面,一個引擎
一個為 CI 打造的命令列,和一個用於探索式測試的桌面視窗。兩者都不是對方的縮水版,並且有測試逐項比對它們的功能。
-
完全離線
沒有帳號,沒有雲端,沒有遙測,沒有更新檢查。命令列執行檔裡根本沒有編譯進網路堆疊。
下載
選擇適合你系統的版本
解壓縮後執行即可。tfg 是命令列,tfg-gui 是桌面視窗。沒有安裝程式,也無需向你的電腦新增任何東西。
| 系統 | 命令列 | 桌面視窗 |
|---|---|---|
| Windows | amd64, arm64 |
amd64 |
| Linux | amd64, arm64 |
amd64 |
| macOS | arm64 |
arm64 |
哪些已簽署,哪些沒有
Windows 與 macOS 的下載檔已簽署,因此啟動時不會出現未知開發者的警告。Linux 的沒有簽署,因為桌面 Linux 沒有可用的對應簽署機制。每個壓縮檔都列在發布頁面的
verify-SHA256SUMS.txt 中,你可以據此核對所下載的內容。
免費開源,GPL-3.0。無需註冊。Windows 與 macOS 的下載檔已簽署,啟動時不會出現警告。