Testing Files Generator
Nederlands

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

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.