Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden von Mocked-Serviceintegrationen zum Testen in Step Functions Local
In Step Functions Local können Sie die Ausführungspfade Ihrer Zustandsmaschinen testen, ohne tatsächlich integrierte Dienste aufzurufen, indem Sie simulierte Dienstintegrationen verwenden. Um Ihre Zustandsmaschinen so zu konfigurieren, dass sie simulierte Dienstintegrationen verwenden, erstellen Sie eine simulierte Konfigurationsdatei. In dieser Datei definieren Sie die gewünschte Ausgabe Ihrer Service-Integrationen als simulierte Antworten und die Ausführungen, die Ihre simulierten Antworten verwenden, um einen Ausführungspfad zu simulieren, als Testfälle.
Indem Sie Step Functions Local die Scheinkonfigurationsdatei zur Verfügung stellen, können Sie Serviceintegrationsrufe testen, indem Sie Zustandsmaschinen ausführen, die die in den Testfällen angegebenen simulierten Antworten verwenden, anstatt tatsächliche Serviceintegrationsaufrufe zu tätigen.
Anmerkung
Wenn Sie in der Mock-Konfigurationsdatei keine simulierten Antworten zur Serviceintegration angeben, ruft Step Functions Local die AWS Serviceintegration unter Verwendung des Endpunkts, den Sie bei der Einrichtung von Step Functions Local konfiguriert haben. Informationen zur Konfiguration von Endpunkten für Step Functions Local finden Sie unterEinstellung der Konfigurationsoptionen für Step Functions Local.
In diesem Thema werden mehrere Konzepte verwendet, die in der folgenden Liste definiert sind:
Mocked Service Integrations — Bezieht sich auf Aufgabenstatus, die so konfiguriert sind, dass sie simulierte Antworten verwenden, anstatt tatsächliche Serviceanfragen auszuführen.
Mocked Responses — Bezieht sich auf Scheindaten, für deren Verwendung Task-Status konfiguriert werden können.
Testfälle — Bezieht sich auf State-Machine-Ausführungen, die so konfiguriert sind, dass sie simulierte Service-Integrationen verwenden.
Scheinkonfigurationsdatei — Bezieht sich auf eine simulierte KonfigurationsdateiJSON, die simulierte Dienstintegrationen, simulierte Antworten und Testfälle enthält und definiert.
Konfiguration von Mocked-Serviceintegrationen
Mit Step Functions Local können Sie jede Serviceintegration simulieren. Step Functions Local erzwingt jedoch nicht, dass die Mocks mit den echten APIs identisch sind. Ein simulierter Task ruft niemals den Service-Endpunkt auf. Wenn Sie keine simulierte Antwort angeben, versucht eine Task, die Dienstendpunkte aufzurufen. Darüber hinaus generiert Step Functions Local automatisch ein Task-Token, wenn Sie eine Aufgabe mit dem simulieren.waitForTaskToken
.
Schritt 1: Geben Sie Mocked Service-Integrationen in einer simulierten Konfigurationsdatei an
Sie können Step Functions testen AWS SDKund optimierte Serviceintegrationen mit Step Functions Local. Die folgende Abbildung zeigt den Zustandsmaschine, der auf der Registerkarte State-Machine-Definition definiert ist:
Dazu müssen Sie eine simulierte Konfigurationsdatei erstellen, die Abschnitte enthält, wie unter definiert. Struktur der Scheinkonfigurationsdatei
-
Erstellen Sie eine Datei mit dem Namen
MockConfigFile.json
, um Tests mit simulierten Dienstintegrationen zu konfigurieren.Das folgende Beispiel zeigt eine simulierte Konfigurationsdatei, die auf eine Zustandsmaschine mit zwei definierten Zuständen namens und verweist.
LambdaState
SQSState
Sie können die
LambdaSQSIntegration
State-Machine-Definition, auf die in der Scheinkonfigurationsdatei verwiesen wird, mithilfe eines der folgenden Testfälle ausführen:-
HappyPath
- Dieser Test simuliert die Ausgabe vonLambdaState
MockedSQSSuccess
bzw.SQSState
unter Verwendung vonMockedLambdaSuccess
und.-
Der gibt
LambdaState
den folgenden Wert zurück:"0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
-
Das gibt
SQSState
den folgenden Wert zurück:"0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
-
-
RetryPath
- Dieser Test simuliert die Ausgabe vonLambdaState
MockedLambdaRetry
MockedSQSSuccess
bzw.SQSState
unter Verwendung von. Darüber hinausLambdaState
ist er so konfiguriert, dass er vier Wiederholungsversuche durchführt. Die simulierten Antworten für diese Versuche sind im Status definiert und indexiert.MockedLambdaRetry
-
Der erste Versuch endet mit einem fehlgeschlagenen Task, der eine Ursache und eine Fehlermeldung enthält, wie im folgenden Beispiel dargestellt:
"0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
-
Der erste und der zweite Wiederholungsversuch enden mit einem Fehler bei der Aufgabe, der eine Ursache und eine Fehlermeldung enthält, wie im folgenden Beispiel gezeigt:
"1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
-
Der dritte Wiederholungsversuch endet mit einem erfolgreichen Task, der das Zustandsergebnis aus dem Payload-Abschnitt in der simulierten Lambda-Antwort enthält.
"3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
Anmerkung
Für Staaten mit einer Wiederholungsrichtlinie erschöpft Step Functions Local die in der Richtlinie festgelegten Wiederholungsversuche, bis eine erfolgreiche Antwort eingeht. Das bedeutet, dass Sie Wiederholungsversuche mit aufeinanderfolgenden Versuchsnummern kennzeichnen müssen und dass Sie alle Wiederholungsversuche abdecken müssen, bevor Sie eine erfolgreiche Antwort zurückgeben.
Wenn Sie für einen bestimmten Wiederholungsversuch keine simulierte Antwort angeben, z. B. „3" wiederholen, schlägt die Ausführung der Zustandsmaschine fehl.
-
-
HybridPath
- Dieser Test simuliert die Ausgabe von.LambdaState
AfterLambdaState
wird erfolgreich ausgeführt und empfängt als Antwort simulierte Daten.SQSState
Führt einen tatsächlichen Serviceaufruf an die in der Produktion angegebene Ressource durch.
Hinweise zum Starten von Testausführungen mit simulierten Dienstintegrationen finden Sie unter. Schritt 3: Führen Sie die Mocked Service-Integrationstests durch
-
Stellen Sie sicher, dass die Struktur der simulierten Antworten der Struktur der tatsächlichen Serviceantworten entspricht, die Sie erhalten, wenn Sie integrierte Serviceanfragen tätigen. Informationen zu den strukturellen Anforderungen für gefälschte Antworten finden Sie unter. Konfiguration von Mocked-Serviceintegrationen
In der vorherigen Beispielkonfigurationsdatei sind die simulierten Antworten in der Struktur der tatsächlichen Antworten definiert, die beim Aufrufen zurückgegeben werden,
MockedLambdaSuccess
undMockedLambdaRetry
entsprechen dieser Struktur.HelloFromLambda
Wichtig
AWS Serviceantworten können in ihrer Struktur zwischen verschiedenen Diensten variieren. Step Functions Local überprüft nicht, ob simulierte Antwortstrukturen den tatsächlichen Service-Response-Strukturen entsprechen. Vor dem Testen müssen Sie sicherstellen, dass Ihre gefälschten Antworten den tatsächlichen Antworten entsprechen. Um die Struktur der Serviceantworten zu überprüfen, können Sie entweder die eigentlichen Serviceabrufe mithilfe von Step Functions ausführen oder die Dokumentation für diese Dienste einsehen.
Schritt 2: Stellen Sie die Mock-Konfigurationsdatei für Step Functions Local bereit
Sie können die Scheinkonfigurationsdatei auf eine der folgenden Arten für Step Functions Local bereitstellen:
Schritt 3: Führen Sie die Mocked Service-Integrationstests durch
Nachdem Sie eine Scheinkonfigurationsdatei erstellt und für Step Functions Local bereitgestellt haben, führen Sie den in der Scheinkonfigurationsdatei konfigurierten Zustandsmaschine mithilfe von simulierten Dienstintegrationen aus. Überprüfen Sie anschließend die Ausführungsergebnisse mithilfe einer API Aktion.
-
Erstellen Sie eine Zustandsmaschine auf der Grundlage der zuvor genannten Definition in der Scheinkonfigurationsdatei.
aws stepfunctions create-state-machine \ --endpoint http://localhost:8083 \ --definition "{\"Comment\":\"Thisstatemachineiscalled:LambdaSQSIntegration\",\"StartAt\":\"LambdaState\",\"States\":{\"LambdaState\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::lambda:invoke\",\"Parameters\":{\"Payload.$\":\"$\",\"FunctionName\":\"arn:aws:lambda:us-east-1:123456789012:function:HelloWorldFunction\"},\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":2,\"MaxAttempts\":3,\"BackoffRate\":2}],\"Next\":\"SQSState\"},\"SQSState\":{\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sqs:sendMessage\",\"Parameters\":{\"QueueUrl\":\"https://sqs.us-east-1.amazonaws.com/123456789012/myQueue\",\"MessageBody.$\":\"$\"},\"End\":true}}}" \ --name "LambdaSQSIntegration" --role-arn "arn:aws:iam::123456789012:role/service-role/LambdaSQSIntegration"
-
Führen Sie die Zustandsmaschine mithilfe von simulierten Dienstintegrationen aus.
Um die Scheinkonfigurationsdatei zu verwenden,
StartExecution
API rufen Sie eine Zustandsmaschine auf, die in der Scheinkonfigurationsdatei konfiguriert ist. Hängen Sie dazu das Suffix,, an die Zustandsmaschine an#
, die von ARN verwendet wird.test_name
StartExecution
ist ein Testfall, der für den Zustandsmaschine in derselben Scheinkonfigurationsdatei konfiguriert ist.test_name
Der folgende Befehl ist ein Beispiel, das die
LambdaSQSIntegration
Zustandsmaschine und die Scheinkonfiguration verwendet. In diesem Beispiel wird dieLambdaSQSIntegration
Zustandsmaschine mit dem in definiertenHappyPath
Test ausgeführtSchritt 1: Geben Sie Mocked Service-Integrationen in einer simulierten Konfigurationsdatei an. DerHappyPath
Test enthält die Konfiguration für die Ausführung zur Verarbeitung von simulierten DienstintegrationsaufrufenLambdaState
undSQSState
Zuständen, die anhand der DienstantwortenMockedLambdaSuccess
undMockedSQSSuccess
simulierten Dienstantworten erfolgen.aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
Zeigen Sie die Antwort auf die Ausführung der Zustandsmaschine an.
Die Antwort auf einen Aufruf
StartExecution
mithilfe eines simulierten Serviceintegrationstests entspricht der Antwort auf einenStartExecution
normalen Aufruf, bei dem das Ausführungs ARN - und das Startdatum zurückgegeben werden.Im Folgenden finden Sie ein Beispiel für eine Antwort auf einen Aufruf
StartExecution
mit dem Mocked Service Integration Test:{ "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
Überprüfen Sie die Ergebnisse der Ausführung, indem Sie einen
ListExecutions
DescribeExecution
, oderGetExecutionHistory
API -Aufruf ausführen.aws stepfunctions get-execution-history \ --endpoint http://localhost:8083 \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices
Das folgende Beispiel zeigt Teile einer Antwort auf einen Aufruf
GetExecutionHistory
unter Verwendung der Ausführung ARN aus der in Schritt 2 gezeigten Beispielantwort. In diesem BeispielSQSState
handelt es sich bei der Ausgabe vonLambdaState
und um die Scheindaten, die inMockedLambdaSuccess
undMockedSQSSuccess
in der Scheinkonfigurationsdatei definiert sind. Darüber hinaus werden die simulierten Daten auf die gleiche Weise verwendet, wie Daten verwendet würden, die bei der Ausführung von tatsächlichen Serviceintegrationsaufrufen zurückgegeben werden. Außerdem wird in diesem Beispiel die Ausgabe vonLambdaState
SQSState
als Eingabe weitergegeben.{ "events": [ ... { "timestamp": "2021-12-02T19:39:48.988000+00:00", "type": "TaskStateEntered", "id": 2, "previousEventId": 0, "stateEnteredEventDetails": { "name": "LambdaState", "input": "{}", "inputDetails": { "truncated": false } } }, ... { "timestamp": "2021-11-25T23:39:10.587000+00:00", "type": "LambdaFunctionSucceeded", "id": 5, "previousEventId": 4, "lambdaFunctionSucceededEventDetails": { "output": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda!\\\"\"}", "outputDetails": { "truncated": false } } }, ... "timestamp": "2021-12-02T19:39:49.464000+00:00", "type": "TaskStateEntered", "id": 7, "previousEventId": 6, "stateEnteredEventDetails": { "name": "SQSState", "input": "{\"statusCode\":200,\"body\":\"\\\"Hello from Lambda!\\\"\"}", "inputDetails": { "truncated": false } } }, ... { "timestamp": "2021-11-25T23:39:10.652000+00:00", "type": "TaskSucceeded", "id": 10, "previousEventId": 9, "taskSucceededEventDetails": { "resourceType": "sqs", "resource": "sendMessage", "output": "{\"MD5OfMessageBody\":\"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51\",\"MessageId\":\"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51\"}", "outputDetails": { "truncated": false } } }, ... ] }