Waar mensen het voor gebruiken
Vijf taken die in bijna elk project voorkomen dat bestanden van mensen aanneemt, en de opdracht die elk doet. Elk voorbeeld hieronder werkt zoals het is geschreven.
Uploadlimieten
Testen of een limiet voor bestandsgrootte wordt afgedwongen waar hij zegt dat hij dat doet
Een limiet is drie testgevallen, niet één: net eronder, precies erop en net erboven. Die met de hand maken betekent bytetellingen uitrekenen en hopen dat je er niet één naast zit. Vraag in plaats daarvan de set:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
Je krijgt drie echte PDF's van 1048575, 1048576 en 1048577 bytes, en een manifest dat zegt dat de
eerste twee geaccepteerd moeten worden en de derde geweigerd wegens size_limit. Je
test leest de verwachting in plaats van dat jij drie asserties met de hand schrijft - en als de
limiet verandert, wijzig je één getal en draai je opnieuw.
Hetzelfde werkt zonder preset als je één set grenzen inline wilt:
tfg generate --format png --boundary 5mb --out ./png-edges
Continuous integration
Fixtures uit de repository houden zonder ze kwijt te raken
Grote binaire fixtures maken een repository traag om te klonen en lastig te reviewen, en niemand kan zien wat er veranderde toen er een werd vervangen. Een recept is een paar honderd tekens YAML die de identieke bestanden opnieuw opbouwen - byte voor byte, op elke machine - omdat elk bestand is afgeleid van de seed van de run.
- name: build the fixtures
run: tfg generate fixtures.yaml --out ./fixtures
- name: run the tests
run: pytest tests/
- name: nothing moved
run: tfg verify ./fixtures/manifest.json
Elk einde heeft zijn eigen afsluitcode, dus een pipeline kan een slecht recept onderscheiden van een volle schijf en van een afwijking bij verificatie. Een mislukte run drukt niets af op de standaarduitvoer, waardoor een logparser een fout niet als gegevens leest.
Schaal
Uitzoeken wat er gebeurt als de map groot is
Importroutines, nachtelijke taken en maplijsten gedragen zich anders bij tienduizend bestanden dan bij tien. Groottes getrokken uit een bereik laten de set op echt verkeer lijken in plaats van op tienduizend identieke bestanden, en de trekking komt uit de seed, dus de set is morgen dezelfde.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
Bekijk wat een run zou kosten voordat hij iets schrijft, wat telt als het totaal in gigabytes wordt gemeten:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
Een run die groter is dan de vrije ruimte op de schijf wordt geweigerd voordat de eerste byte is geschreven, in plaats van de schijf te vullen en halverwege te falen.
Archieven
Een uitpakprogramma testen met een archief dat echt bestanden bevat
Een leeg archief met de juiste extensie bewijst niets over code die het opent en doorloopt wat erin zit. Declareer de inhoud en het archief bevat die echt:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
Nestdiepte, aantal items en de grootte van wat erin zit zijn allemaal dingen waar een importroutine een mening over heeft, en zo kom je erachter wat die meningen zijn.
Parsers en viewers
Controleren dat je eigen code een formaat leest zoals echte software dat doet
Elk formaat hier wordt vóór levering gecontroleerd met een onafhankelijke lezer - een PNG wordt geopend en de pixels worden vergeleken, een DOCX wordt teruggelezen door aparte bibliotheken, een archief wordt uitgepakt. Dat betekent dat een bestand dat je parser weigert een bevinding is over je parser, niet over de generator.
tfg generate --format docx --size 300kb --set paragraphs=120 --out ./documents
tfg generate --format xlsx --size 2mb --set rows=400 --set columns=6 --out ./sheets
De pagina met formaten toont de instellingen die elk accepteert en het kleinste bestand dat elk kan zijn.
Handleidingen
Twee hiervan in detail
- Beschadigde testbestanden - een bestand dat met opzet kapot is, op exacte grootte, met in het manifest wat ermee moet gebeuren.
- Testbestanden in CI - een GitHub Actions-workflow, een GitLab-job en de afsluitcodes die een build laten mislukken.
Voor wie dit is
QA-engineers, testautomatisering en iedereen wiens code een uploadformulier, een importroutine, een parser of een opslagquotum achter zich heeft. Het draait op een machine zonder enig netwerk, wat telt in een afgesloten bedrijfsomgeving waar een generator in de browser geen optie is.
Gratis en open source, GPL-3.0. Geen account nodig. De downloads voor Windows en macOS zijn ondertekend en starten zonder waarschuwing.