Testen eines Asset Compute-Sekundärs
Das Asset Compute-Projekt definiert ein Muster für das einfache Erstellen und Ausführen von Tests von Asset Compute-Sekundären.
Anatomie eines Sekundär-Tests
Asset Compute-Sekundär-Tests sind in Test-Suites unterteilt, und in jeder Test-Suite werden ein oder mehrere Testfälle durchgeführt, in denen eine Testbedingung angegeben wird.
Die Teststruktur in einem Asset Compute-Projekt sieht wie folgt aus:
/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
...
Jeder Testentwurf kann die folgenden Dateien enthalten:
-
file.<extension>- Zu testende Quelldatei (Erweiterung kann alles außer
.link) - Erforderlich
- Zu testende Quelldatei (Erweiterung kann alles außer
-
rendition.<extension>- Erwartete Ausgabedarstellung
- Erforderlich, außer für Fehlertests
-
params.json- JSON-Anweisungen für einzelne Ausgabedarstellungen
- Optional
-
validate- Ein Skript, das erwartete und tatsächliche Dateipfade von Ausgabedarstellungen als Argumente abruft und Exitcode 0 zurückgeben muss, wenn das Ergebnis in Ordnung ist, oder einen Exitcode ungleich null, wenn die Überprüfung oder der Vergleich fehlgeschlagen ist.
- Optional, Standardwert ist der Befehl
diff - Verwenden Sie ein Shell-Skript, das einen Docker-Ausführungsbefehl für die Verwendung verschiedener Validierungs-Tools umschließt
-
mock-<host-name>.json- JSON-formatierte HTTP-Antworten für Mocking-Aufrufe externer Dienste.
- Optional, nur verwendet, wenn der Sekundär-Code eigene HTTP-Anfragen sendet
Schreiben eines Testfalls
Dieser Testfall bestätigt, dass die parametrisierte Eingabe (params.json) für die Eingabedatei (file.jpg) die erwartete PNG-Wiedergabe (rendition.png) erzeugt.
-
Löschen Sie zunächst den automatisch generierten
simple-worker-Testfall unter/test/asset-compute/simple-worker, da dieser ungültig ist, da unser Sekundär nicht mehr einfach die Quelle in die Wiedergabeversion kopiert. -
Erstellen Sie einen neuen Testfallordner unter
/test/asset-compute/worker/success-parameterized, um die erfolgreiche Ausführung des Sekundärs zu testen, der eine PNG-Wiedergabe erzeugt. -
Fügen Sie im Ordner
success-parameterizeddie Test-Eingabedatei für diesen Testfall hinzu und nennen Sie siefile.jpg. -
Fügen Sie im Ordner
success-parameterizedeine neue Datei mit dem Namenparams.jsonhinzu, die die Eingabeparameter des Sekundär definiert:code language-json { "size": "400", "contrast": "0.25", "brightness": "-0.50" }Dies sind dieselben Schlüssel/Werte, die in die Definition des Asset Compute-Profils des Entwicklungstools eingegeben werden, abzüglich des
worker-Schlüssels. -
Fügen Sie die erwartete Ausgabedarstellungsdatei zu diesem Testfall hinzu und nennen Sie sie
rendition.png. Diese Datei stellt die erwartete Ausgabe des Sekundärs für die gegebene Eingabefile.jpgdar. -
Führen Sie in der Befehlszeile die Tests für den Projektstamm durch, indem Sie
aio app testausführen- Stellen Sie sicher, dass Docker Desktop und unterstützende Docker-Bilder installiert und gestartet sind
- Beenden Sie alle laufenden Entwicklungs-Tool-Instanzen
Schreiben eines Testfalls zur Fehlerprüfung
Dieser Testfall prüft, ob der Sekundär den entsprechenden Fehler auslöst, wenn der Parameter contrast auf einen ungültigen Wert gesetzt wird.
-
Erstellen Sie einen neuen Testfallordner unter
/test/asset-compute/worker/error-contrast, um eine fehlerhafte Ausführung des Sekundärs aufgrund eines ungültigencontrast-Parameterwertes zu testen. -
Fügen Sie im Ordner
error-contrastdie Test-Eingabedatei für diesen Testfall hinzu und nennen Sie siefile.jpg. Der Inhalt dieser Datei ist für diesen Test unerheblich, sie muss nur vorhanden sein, um die Prüfung „Korrupte Quelle“ zu überstehen, damit dierendition.instructions-Gültigkeitsprüfungen erreicht werden können, die in diesem Testfall überprüft werden. -
Fügen Sie im Ordner
error-contrasteine neue Datei mit dem Namenparams.jsonhinzu, die die Eingabeparameter des Sekundärs mit dem Inhalt definiert:code language-json { "contrast": "10", "errorReason": "rendition_instructions_error" }- Setzen Sie den Parameter
contrastauf10, einen ungültigen Wert, da der Kontrast zwischen -1 und 1 liegen muss, um einenRenditionInstructionsErrorauszulösen. - Stellen Sie sicher, dass der entsprechende Fehler in Tests ausgelöst wird, indem Sie den Schlüssel
errorReasonauf den mit dem erwarteten Fehler verbundenen „Grund“ setzen. Dieser ungültige Kontrast-Parameter löst den benutzerdefinierten Fehler,RenditionInstructionsError, aus, daher setzen SieerrorReasonauf den Grund dieses Fehlers, oderrendition_instructions_error, um zu bestätigen, dass er ausgelöst wird.
- Setzen Sie den Parameter
-
Da bei einer fehlerhaften Ausführung keine Ausgabedarstellung generiert werden sollte, ist keine
rendition.<extension>-Datei erforderlich. -
Führen Sie die Test-Suite aus dem Stammverzeichnis des Projekts aus, indem Sie den folgenden Befehl ausführen
aio app test- Stellen Sie sicher, dass Docker Desktop und unterstützende Docker-Bilder installiert und gestartet sind
- Beenden Sie alle laufenden Entwicklungs-Tool-Instanzen
Testfälle bei GitHub
Die endgültigen Testfälle sind auf Github verfügbar unter: