Een Asset Compute-worker testen
Het project van Asset Compute bepaalt een patroon voor gemakkelijk het creëren van en het uitvoeren van tests van de arbeiders van Asset Compute .
Anatomie van een arbeiderstest
Asset Compute Workers' tests worden opgedeeld in testreeksen en binnen elke testreeks worden een of meer testcase uitgevoerd waarin een testvoorwaarde wordt bevestigd.
De opzet van de tests in een Asset Compute-project is als volgt:
/actions/<worker-name>/index.js
...
/test/
asset-compute/
<worker-name>/ <--- Test suite for the worker, must match the yaml key for this worker in manifest.yml
<test-case-1>/ <--- Specific test case
file.jpg <--- Input file (ie. `source.path` or `source.url`)
params.json <--- Parameters (ie. `rendition.instructions`)
rendition.png <--- Expected output file (ie. `rendition.path`)
<test-case-2>/ <--- Another specific test case for this worker
...
Elke testgietvorm kan de volgende dossiers hebben:
-
file.<extension>- Source-bestand dat moet worden getest (extensie kan alles zijn behalve
.link) - Vereist
- Source-bestand dat moet worden getest (extensie kan alles zijn behalve
-
rendition.<extension>- Uitvoering verwacht
- Vereist, behalve voor fouttests
-
params.json- JSON-instructies voor één uitvoering
- Optioneel
-
validate- Een script dat de verwachte en werkelijke paden van het weergavebestand als argumenten krijgt en afsluitcode 0 retourneert als het resultaat OK is, of een afsluitcode die niet gelijk is aan nul als de validatie of vergelijking mislukt.
- Optioneel, wordt standaard de opdracht
diffuitgevoerd - Een shellscript gebruiken dat een docker-uitvoeropdracht verpakt voor het gebruik van verschillende validatiegereedschappen
-
mock-<host-name>.json- JSON vormde de reacties van HTTP voor het bewegen van externe de dienstvraag .
- Optioneel, alleen gebruikt als de code van de worker een eigen HTTP-aanvraag uitvoert
Een testcase schrijven
Deze testcase stelt de parameterized input (params.json) voor het inputdossier (file.jpg) toe produceert de verwachte PNG vertoning (rendition.png).
-
Verwijder eerst de automatisch gegenereerde testcase van
simple-workerop/test/asset-compute/simple-workeromdat deze ongeldig is, omdat onze worker de bron niet langer gewoon naar de uitvoering kopieert. -
Maak een nieuwe testhoofdmap op
/test/asset-compute/worker/success-parameterizedom te testen of de worker die een PNG-uitvoering genereert, correct wordt uitgevoerd. -
In de
success-parameterizedomslag, voeg het test inputdossier voor dit testgeval toe en noem hetfile.jpg. -
Voeg in de map
success-parameterizedeen nieuw bestand met de naamparams.jsontoe dat de invoerparameters van de worker definieert:code language-json { "size": "400", "contrast": "0.25", "brightness": "-0.50" }Dit zijn de zelfde sleutel/de waarden die in de het profieldefinitie van Asset Compute van het Hulpmiddel van de Ontwikkeling worden overgegaan, minus de
workersleutel. -
Voeg het verwachte vertoningsdossier aan dit testgeval toe en noem het
rendition.png. Dit bestand vertegenwoordigt de verwachte uitvoer van de worker voor de opgegeven invoerfile.jpg. -
Voer vanaf de opdrachtregel de tests van de projectbasis uit door
aio app testuit te voeren- Verzeker {de Desktop van 0} Docker 🔗 en het steunen van de beelden van Docker geïnstalleerd en begonnen zijn
- Beëindig alle actieve instanties van het Hulpmiddel voor Ontwikkeling
Een testcase voor foutcontrole schrijven
Met deze test wordt getest of de worker de juiste fout genereert wanneer de parameter contrast op een ongeldige waarde is ingesteld.
-
Maak een nieuwe testhoofdmap bij
/test/asset-compute/worker/error-contrastom een foutieve uitvoering van de worker te testen vanwege een ongeldigecontrast-parameterwaarde. -
In de
error-contrastomslag, voeg het test inputdossier voor dit testgeval toe en noem hetfile.jpg. De inhoud van dit bestand is niet van belang voor deze test. Het bestand moet bestaan om voorbij de controle "Beschadigde bron" te komen, zodat de geldigheidscontroles vanrendition.instructionskunnen worden uitgevoerd die door deze testcase worden gevalideerd. -
Voeg in de map
error-contrasteen nieuw bestand met de naamparams.jsontoe dat de invoerparameters van de worker met de inhoud definieert:code language-json { "contrast": "10", "errorReason": "rendition_instructions_error" }- Stel
contrast-parameters in op10, een ongeldige waarde omdat het contrast tussen -1 en 1 moet liggen om eenRenditionInstructionsError-element te genereren. - Stel dat de juiste fout wordt gegenereerd in tests door de
errorReason-toets in te stellen op de 'reden' die aan de verwachte fout is gekoppeld. Deze ongeldige contrastparameter werpt de douanefout ,RenditionInstructionsError, daarom plaatserrorReasonaan de reden van deze fout, ofrendition_instructions_errorom het te bevestigen wordt geworpen.
- Stel
-
Aangezien er geen uitvoering moet worden gegenereerd tijdens een foutieve uitvoering, is er geen
rendition.<extension>-bestand nodig. -
Voer de opdracht
aio app testuit om de testsuite uit te voeren vanuit de hoofdmap van het project- Verzeker {de Desktop van 0} Docker 🔗 en het steunen van de beelden van Docker geïnstalleerd en begonnen zijn
- Beëindig alle actieve instanties van het Hulpmiddel voor Ontwikkeling
Testen op Github
De laatste testcase is beschikbaar op Github op: