Echte Testdateien in jeder exakten Größe erzeugen
PDF, PNG, DOCX, ZIP - insgesamt 26 Formate, und jedes ist eine echte Datei, die sich in der Software öffnet, zu der sie gehört, in genau der Größe, die du verlangt hast. Jeder Lauf hält außerdem fest, was deine Anwendung mit jeder Datei tun soll. Kommandozeile und Desktop-Fenster, kostenlos und Open Source, vollständig auf deinem Rechner.
Kostenlos und Open Source, GPL-3.0. Keine Anmeldung nötig. Die Downloads für Windows und macOS sind signiert und starten ohne Warnung.
-
26
echte Formate, jedes öffnet sich in der Software, zu der es gehört
-
1 Byte
die Genauigkeit jeder verlangten Größe, nie stillschweigend gerundet
-
0
Verbindungen irgendwohin - kein Konto, keine Telemetrie, keine Update-Prüfung
Das Problem
Eine Testdatei zu machen ist einfach. Die richtigen tausend zu machen ist das Mühsame
Du testest Software, die Dateien von Menschen annimmt. Früher oder später brauchst du:
- ein PDF von exakt 10 MB, um herauszufinden, ob das Upload-Limit echt ist
- die drei Dateien beidseits dieses Limits, um Off-by-one-Fehler zu fangen
- 10.000 Logdateien, um zu sehen, was der nächtliche Job tut, wenn der Ordner groß ist
- ein ZIP, das wirklich 200 Dokumente enthält, keine Attrappe mit der richtigen Endung
- eine 4-GB-Datei, ohne eine 4-GB-Datei in deinem Repository zu halten
- die gleichen Fixtures auf deinem Laptop und auf dem Build-Server, Byte für Byte
Genau das ersetzt dieses Tool. Es ist gebaut für QA-Engineers, Testautomatisierung und alle, deren Code ein Upload-Formular, eine Importroutine, einen Parser oder ein Speicherkontingent hinter sich hat.
Was es anders macht
Andere Generatoren hören bei den Bytes auf. Dieser beantwortet, was dein Test wirklich fragt
Ein Ordner voller Dateien lässt dich weiter entscheiden, was jede davon belegen soll. Jeder Lauf
schreibt hier ein manifest.json neben die Dateien - eine einfache Liste von allem,
was erzeugt wurde, und zu jedem Eintrag eine deklarierte Erwartung.
Angenommen, dein Upload-Endpunkt erlaubt 1 MB. Fordere die drei Dateien an, die auf dieser Linie liegen:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
| Datei | Bytes | Dein System soll | Weil |
|---|---|---|---|
1mb_under_1b.pdf | 1048575 | akzeptieren | sie liegt innerhalb des Limits |
1mb_at_limit.pdf | 1048576 | akzeptieren | das Limit selbst ist erlaubt |
1mb_over_1b.pdf | 1048577 | ablehnen | size_limit |
Drei Dateien, drei verschiedene Antworten, in maschinenlesbarer Form. Dein Test liest das Manifest, statt dass du die Assertions von Hand schreibst:
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"]
Wo die Antwort von deiner eigenen Richtlinie abhängt, sagt das Manifest das
Es hält unspecified fest, statt eine Erwartung zu erfinden. Ein Generator, der rät,
erzeugt falsche Fehlschläge, und eine Testsuite, die ständig Alarm schlägt, wird abgeschaltet.
Presets
Wähle die Frage, bekomme das ganze Set
Ein Preset ist ein Set aus Testdateien, das um eine Testfrage herum entworfen wurde, damit du nicht selbst herausfinden musst, welche Dateien was belegen. Jedes hat eine eigene Seite mit dem, was es meist findet, was im Set steckt und welche Einstellungen es kennt.
-
Kommt eine gültige Datei durch, die so klein ist, wie das Format es erlaubt?
empty-and-minimal -
Speichert, zeigt und liefert mein System einen Dateinamen korrekt, mit dem es nicht gerechnet hat?
filename-handling -
Wird ein Größenlimit genau dort durchgesetzt, wo es angegeben ist?
size-boundaries -
Übersteht mein Tabellenimport das, was echte Tools exportieren?
tabular-import -
Weiß mein Leser, in welcher Kodierung eine Datei vorliegt, oder rät er?
text-encoding -
Nimmt mein Upload-Formular an, was es soll, und weist den Rest ab?
upload-validation
Schnellstart
Drei Befehle, um es in Aktion zu sehen
-
Eine Datei erzeugen
Ein PNG, genau zwei Megabyte:
tfg generate --format png --size 2mb --out ./fixtures -
Viele Dateien erzeugen
Zehntausend Logdateien, jede zwischen einem und acht Kilobyte, die Größen werden aus dem Seed gezogen, sodass morgen dasselbe Set herauskommt. Gib jedem Lauf ein eigenes Verzeichnis - das Manifest ist die einzige Aufzeichnung dessen, was ein Lauf geschrieben hat, deshalb weigert sich das Tool, ein zweites darüber zu schreiben:
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./logs -
Prüfen und dann entfernen
verifysagt dir, dass sich nichts verändert hat.cleanupentfernt genau das, was geschrieben wurde, und sonst nichts:tfg verify ./logs/manifest.json tfg cleanup ./logs/manifest.json --yes
Größen zählen in 1024ern, wie es dein Dateimanager tut, 2mb bedeutet also 2097152
Bytes. Eine einfache Byte-Zahl funktioniert auch. Die
Dokumentation behandelt Rezepte, das Manifest und die
Exit-Codes.
Was du bekommst
Gebaut für eine Testsuite, die unbeaufsichtigt läuft
-
Exakte Größe, auf das Byte genau
Verlange 10485761 Bytes und bekomme genau das. Eine Größe, die ein Format nicht erreichen kann, ist ein Fehler mit Begründung, nie eine Datei in der falschen Größe.
-
26 echte Formate
Keine aufgefüllten Nullen mit einer Endung. Ein erzeugtes PNG öffnet sich im Bildbetrachter, ein DOCX in Word, ein ZIP lässt sich entpacken. Jedes wird vor der Auslieferung mit unabhängigen Readern geprüft.
-
Ein Manifest, das ein Testorakel ist
Pfad, Größe, SHA-256, Format, Seed, Tool-Version - und was dein System mit der Datei tun soll.
-
Reproduzierbar
Gleiches Rezept und gleicher Seed, gleiche Bytes, auf jedem Rechner. Checke ein kleines YAML-Rezept ein statt großer binärer Fixtures.
-
Zwei Oberflächen, eine Engine
Eine Kommandozeile für die CI und ein Desktop-Fenster für exploratives Testen. Keine ist eine abgespeckte Version der anderen, und ein Test vergleicht sie Fähigkeit für Fähigkeit.
-
Komplett offline
Kein Konto, keine Cloud, keine Telemetrie, keine Update-Prüfung. In die Kommandozeilen-Binärdatei ist gar kein Netzwerkstack einkompiliert.
Download
Wähle den Build für dein System
Entpacke das Archiv und starte es. tfg ist die Kommandozeile und tfg-gui
das Desktop-Fenster. Es gibt keinen Installer und nichts, was auf deinem Rechner hinzugefügt
werden müsste.
| System | Kommandozeile | Desktop-Fenster |
|---|---|---|
| Windows | amd64, arm64 |
amd64 |
| Linux | amd64, arm64 |
amd64 |
| macOS | arm64 |
arm64 |
Was signiert ist und was nicht
Die Downloads für Windows und macOS sind signiert und starten daher ohne Warnung vor einem
unbekannten Entwickler. Die für Linux nicht, weil es unter Desktop-Linux nichts Vergleichbares
zum Signieren gibt. Jedes Archiv steht auf der Release-Seite in
verify-SHA256SUMS.txt, sodass du prüfen kannst, was du heruntergeladen hast.
Kostenlos und Open Source, GPL-3.0. Keine Anmeldung nötig. Die Downloads für Windows und macOS sind signiert und starten ohne Warnung.