Verwenden von verspotteten Service-Integrationen - AWS Step Functions

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 verspotteten Service-Integrationen

In Step Functions Local können Sie die Ausführungspfade Ihrer Zustandsmaschinen testen, ohne tatsächlich integrierte Dienste aufzurufen, indem Sie verspottete Service-Integrationen verwenden. Um Ihre Zustandsmaschinen für die Verwendung von verspotteten Service-Integrationen zu konfigurieren, erstellen Sie eine Mock-Konfigurationsdatei. In dieser Datei definieren Sie die gewünschte Ausgabe Ihrer Service-Integrationen als verspottete Antworten und Ausführungen, die Ihre verspotteten Antworten verwenden, um einen Ausführungspfad als Testfälle zu simulieren.

Durch Bereitstellung der Mock-Konfigurationsdatei anSchrittfunktionenLokal können Sie Service-Integrationsaufrufe testen, indem Sie Zustandsmaschinen ausführen, die die in den Testfällen angegebenen verspotteten Antworten verwenden, anstatt tatsächliche Service-Integrationsaufrufe zu tätigen.

Anmerkung

Wenn Sienichtgeben Sie verspottete Service-Integrationsantworten in der Mock-Konfigurationsdatei an, Step Functions Local ruft dieAWSServiceintegration mit dem Endpunkt, den Sie beim Einrichten von Step Functions Local konfiguriert haben. Informationen zum Konfigurieren von Endpoints für Step Functions Local finden Sie unterEinstellen der Konfigurationsoptionen für Step Functions lokalaus.

Schlüsselkonzepte in diesem Thema

In diesem Thema werden mehrere Konzepte verwendet, die in der folgenden Liste definiert sind:

  • Verspottete Service-Integrationen - Bezieht sich auf Aufgabenstatus, die so konfiguriert sind, dass verspottete Antworten verwendet werden, anstatt tatsächliche Serviceaufrufe durchzuführen

  • Verspottete Antworten - Bezieht sich auf Mock-Daten, für die Task-Status konfiguriert werden können.

  • Testfälle - Bezieht sich auf Statusmaschinenausführungen, die für die Verwendung von verspotteten Service-Integrationen konfiguriert sind.

  • Mock Configuration File - Bezieht sich auf eine Mock-Konfigurationsdatei, die JSON enthält, die verspottete Service-Integrationen, verspottete Antworten und Testfälle definiert.

Schritt 1: Angeben von verspotteten Dienstintegrationen in einer Mock-Konfigurationsdatei

Sie haben folgende Möglichkeiten testen Schrittfunktionen AWS SDK und optimierte Service-Integrationen mit Step Functions Local. Die folgende Abbildung zeigt den Statuscomputer, der auf der Registerkarte Definition des Zustands-Rechners definiert ist:


        Beispiel für die Service-Integration verspottet.

Dazu müssen Sie eine Mock-Konfigurationsdatei erstellen, die Abschnitte enthält, die unterEinführung in die Struktur der Mock-Konfigurationaus.

  1. Erstellen Sie eine Datei namensMockConfigFile.jsonum Tests mit verspotteten Service-Integrationen zu konfigurieren.

    Das folgende Beispiel zeigt eine Mock-Konfigurationsdatei, die auf einen Statuscomputer mit zwei definierten Zuständen namensLambdaStateundSQSStateaus.

    Mock configuration file example

    Nachfolgend finden Sie ein Beispiel für eine Mock-Konfigurationsdateiwas zeigt, wie man Antworten verspottetAufrufen einer Lambda-Funktionundeine Nachricht an Amazon SQS sendenaus. In diesem Beispiel fehlt bei der AktionLambdaSQSIntegrationState Machine enthält drei Testfälle mit dem NamenHappyPath,RetryPath, undHybridPath welche verspotten dieTask Bundesstaaten benanntLambdaStateundSQSStateaus. Diese Staaten benutzen dasMockedLambdaSuccess,MockedSQSSuccess, undMockedLambdaRetryService-Antworten sollen verspottet werden. Diese verspotteten Service-Antworten sind imMockedResponses-Abschnitt der Datei.

    { "StateMachines":{ "LambdaSQSIntegration":{ "TestCases":{ "HappyPath":{ "LambdaState":"MockedLambdaSuccess", "SQSState":"MockedSQSSuccess" }, "RetryPath":{ "LambdaState":"MockedLambdaRetry", "SQSState":"MockedSQSSuccess" }, "HybridPath":{ "LambdaState":"MockedLambdaSuccess" } } } }, "MockedResponses":{ "MockedLambdaSuccess":{ "0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } } }, "LambdaMockedResourceNotReady":{ "0":{ "Throw":{ "Error":"Lambda.ResourceNotReadyException", "Cause":"Lambda resource is not ready." } } }, "MockedSQSSuccess":{ "0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } } }, "MockedLambdaRetry":{ "0":{ "Throw":{ "Error":"Lambda.ResourceNotReadyException", "Cause":"Lambda resource is not ready." } }, "1-2":{ "Throw":{ "Error":"Lambda.TimeoutException", "Cause":"Lambda timed out." } }, "3":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } } } } }
    State machine definition

    Im Folgenden finden Sie ein Beispiel für eine Statusmaschinendefinition namensLambdaSQSIntegration, das zwei Service-Integrations-Aufgabenstatus definiert, genanntLambdaStateundSQSStateaus.LambdaStateenthält eine Wiederholungsrichtlinie basierend aufStates.ALLaus.

    { "Comment":"This state machine is called: LambdaSQSIntegration", "StartAt":"LambdaState", "States":{ "LambdaState":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "Payload.$":"$", "FunctionName":"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 } } }

    Sie können das ausführenLambdaSQSIntegrationStatusmaschinendefinition, auf die in der Mock-Konfigurationsdatei mit einem der folgenden Testfälle verwiesen wird:

    • HappyPath- Dieser Test verspottet die Ausgabe vonLambdaStateundSQSStateunter Verwendung vonMockedLambdaSuccessundMockedSQSSuccessbeziehungsweise.

      • DieLambdaStategibt den folgenden Wert zurück:

        "0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
      • DieSQSStategibt den folgenden Wert zurück:

        "0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
    • RetryPath- Dieser Test verspottet die Ausgabe vonLambdaStateundSQSStateunter Verwendung vonMockedLambdaRetryundMockedSQSSuccessbeziehungsweise. Darüber hinaus giltLambdaStateist so konfiguriert, dass er vier Wiederholungsversuche durchführt. Die verspotteten Antworten für diese Versuche sind definiert und indiziert imMockedLambdaRetryZustand.

      • Der erste Versuch endet mit einem Task-Fehler, der eine Ursache- und Fehlermeldung enthält, wie im folgenden Beispiel gezeigt:

        "0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
      • Der erste und zweite Wiederholungsversuche enden mit einem Task-Fehler, der eine Ursache- und Fehlermeldung enthält, wie im folgenden Beispiel gezeigt:

        "1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
      • Der dritte Wiederholungsversuch endet mit einer erfolgreichen Aufgabe, die das Statusergebnis aus dem Payload-Abschnitt in der verspotteten Lambda-Antwort enthält.

        "3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
        Anmerkung
        • Für Staaten mit einer Wiederholungsrichtlinie wird Step Functions Local die in der Richtlinie festgelegten Wiederholungsversuche ausschöpfen, bis sie eine Erfolgsantwort erhalten. Dies bedeutet, dass Sie Mocks für Wiederholungen mit aufeinanderfolgenden Versuchsnummern bezeichnen müssen und alle Wiederholungsversuche abdecken sollten, bevor Sie eine Erfolgsantwort zurückgeben.

        • Wenn Sie keine verspottete Antwort für einen bestimmten Wiederholungsversuch angeben, z. B. wiederholen Sie „3", schlägt die Ausführung des Zustandsmaschiners fehl.

    • HybridPath- Dieser Test verspottet die Ausgabe vonLambdaStateaus. NachLambdaStateläuft erfolgreich und empfängt verspottete Daten als Antwort,SQSStateführt einen tatsächlichen Serviceaufruf an die in der Produktion angegebene Ressource durch.

    Weitere Informationen zum Starten von Testausführungen mit verspotteten Service-Integrationen finden Sie unterSchritt 3: Führen Sie Mocked Service Integrationstestsaus.

  2. Stellen Sie Folgendes sicherdass derverspottete Antworten'strukturentspricht der Struktur der tatsächlichen Service-Antworten, die Sie erhalten, wenn Sie integrierte Service-Anrufe tätigen. Weitere Informationen zu den strukturellen Anforderungen für verspottete Antworten finden Sie unterKonfigurieren von verspotteten Dienstintegrationenaus.

    In derfrüherBeispiel Mock-Konfigurationsdatei, die verspotteten Antworten definiert inMockedLambdaSuccessundMockedLambdaRetryentspricht der Struktur der tatsächlichen Antworten, die vom Aufruf zurückgegeben werdenHelloFromLambdaaus.

    Wichtig

    AWSService-Antworten können in der Struktur zwischen verschiedenen Diensten variieren. Step Functions Local überprüft nicht, ob verspottete Antwortstrukturen den tatsächlichen Service-Response-Strukturen entsprechen. Sie müssen sicherstellen, dass Ihre verspotteten Antworten den tatsächlichen Antworten entsprechen, bevor Sie ihn testen. BisRezensionDie Struktur der Service-Antworten können Sie entweder die tatsächlichen Serviceaufrufe mit Step Functions durchführen oder die Dokumentation einsehenzumdiese Dienste.

Schritt 2: Bereitstellen der Mock-Konfigurationsdatei Step Functions lokal

Sie können die Mock-Konfigurationsdatei an Step Functions Local bereitstelleninEine der folgenden Möglichkeiten:

Docker
Anmerkung

Wenn Sie die Docker-Version von Step Functions Local verwenden, können Sie die Mock-Konfigurationsdatei nur mit einer Umgebungsvariablen bereitstellen. Außerdem müssen Sie die Mock-Konfigurationsdatei beim ersten Serverstart auf den lokalen Container Step Functions einhängen.

Hängen Sie die Mock-Konfigurationsdatei in ein beliebiges Verzeichnis eininnerhalbder Step Functions Lokaler Containeraus. DannLegen Sie eine Umgebungsvariable namens festSFN_MOCK_CONFIG das enthältder Pfad zur Mock-KonfigurationsdateiinDer Container. DieserMethodeermöglicht es, dass die Mock-Konfigurationsdatei irgendetwas benannt wird, solange die Umgebungsvariable den Dateipfad und den Namen enthält.

Der folgende Befehlzeigt das Format an, um das Docker-Image zu starten.

docker run -p 8083:8083 --mount type=bind,readonly,source={absolute path to mock config file},destination=/home/StepFunctionsLocal/MockConfigFile.json -e SFN_MOCK_CONFIG="/home/StepFunctionsLocal/MockConfigFile.json" amazon/aws-stepfunctions-local

Im folgenden Beispiel wird der Befehl verwendet, um das Docker-Image zu starten.

docker run -p 8083:8083 --mount type=bind,readonly,source=/Users/admin/Desktop/workplace/MockConfigFile.json,destination=/home/StepFunctionsLocal/MockConfigFile.json -e SFN_MOCK_CONFIG="/home/StepFunctionsLocal/MockConfigFile.json" amazon/aws-stepfunctions-local
JAR File

Verwenden Sie eine der folgenden Möglichkeiten, um die Mock-Konfigurationsdatei für Step Functions Local bereitzustellen:

  • Legen Sie die Mock-Konfigurationsdatei in demselben Verzeichnis wieStep FunctionsLocal.jaraus. Wenn Sie diese Methode verwenden, müssen Sie die Mock-Konfigurationsdatei benennen MockConfigFile.jsonaus.

  • Legen Sie in der Sitzung mit Step Functions Local eine Umgebungsvariable mit dem Namen festSFN_MOCK_CONFIG, in dem vollständigen Pfad der Mock-Konfigurationsdatei. Diese Methodeermöglicht es, dass die Mock-Konfigurationsdatei irgendetwas benannt wird, solange die Umgebungsvariable ihren Dateipfad und Namen enthält. Im folgenden Beispiel wird derSFN_MOCK_CONFIGwird so eingestellt, dass sie auf eine Mock-Konfigurationsdatei namensEnvSpecifiedMockConfig.json, in der/home/workspaceVerzeichnisaus.

    export SFN_MOCK_CONFIG="/home/workspace/EnvSpecifiedMockConfig.json"
Anmerkung
  • Wenn Sie die Umgebungsvariable nicht angebenSFN_MOCK_CONFIGzu Step Functions Local wird standardmäßig versucht, eine Mock-Konfigurationsdatei mit dem Namen zu lesenMockConfigFile.jsonin dem Verzeichnis, aus dem Sie Step Functions Local gestartet haben.

  • Wenn Sie die Mock-Konfigurationsdatei im selben Verzeichnis wieStep FunctionsLocal.jarundLegen Sie die Umgebungsvariable festSFN_MOCK_CONFIG, Lesen Sie Step Functions Local die Datei, die durch die Umgebungsvariable angegeben ist.

Schritt 3: Führen Sie Mocked Service Integrationstests

Nachdu schaffst und bereitstellsteine Mock-Konfigurationsdatei zu Step Functions Local, führen Sie den in der Mock-Konfigurationsdatei konfigurierten Zustandsmaschine mit verspotteten Service-Integrationen aus. Überprüfen Sie dann die Ausführungsergebnisse mit einer API-Aktion.

  1. Erstellen Sie eine Zustandsmaschine basierend auf der zuvor erwähnten Definition immock-Konfigurationsdateiaus.

    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"
  2. Führen Sie Folgendes aus:dieStatusmaschine mit verspotteten Service-Integrationen.

    Um die Mock-Konfigurationsdatei zu verwenden, erstellen Sie eineStartExecutionAPI-Aufruf auf einem Statuscomputer, der in der Mock-Konfigurationsdatei konfiguriert ist. Hängen Sie dazu das Suffix an,#test_name, an den ARN des Zustandsautomaten, der von verwendet wirdStartExecutionaus.test_nameist ein Testfall, der für den Statuscomputer in derselben Mock-Konfigurationsdatei konfiguriert ist.

    Der folgende -Befehl ist ein Beispiel, in dem dieLambdaSQSIntegrationStatusmaschine und Mock-Konfiguration. In diesem Beispiel fehlt bei der AktionLambdaSQSIntegrationState Machine wird mit demHappyPathTest definiert inSchritt 1: Angeben von verspotteten Dienstintegrationen in einer Mock-Konfigurationsdateiaus. DieHappyPathtest enthält die Konfiguration für die Ausführung zubewältigenMock Service Integration ruft das aufLambdaStateundSQSStateStaaten machen mit demMockedLambdaSuccessundMockedSQSSuccessService-Antworten sollen verspottet werden.

    aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
  3. Zeigen Sie die -Ausführung des Zustandsautomaten an.

    Die Antwort auf das AnrufenStartExecutionDie Verwendung eines verspotteten Service-Integrationstests entspricht der Reaktion auf den AnrufStartExecutionnormalerweise, was den Ausführungs-ARN und das Startdatum zurückgibt.

    Nachfolgend finden Sie eine BeispielantwortStartExecutionVerwendung des verspotteten Service-Integrationstests:

    { "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
  4. Überprüfen Sie dasErgebnisse der Ausführungindem Sie einListExecutions,DescribeExecution, oderGetExecutionHistoryAPI-Aufruf.

    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 AufrufGetExecutionHistorymit dem Ausführungs-ARN von derBeispielantwort in Schritt 2 gezeigtaus. In diesem Beispiel wird die Ausgabe vonLambdaStateundSQSStatesind die Mock-Daten definiert inMockedLambdaSuccessundMockedSQSSuccessimmock-Konfigurationsdateiaus. Darüber hinaus werden die verspotteten Daten auf die gleiche Weise verwendet, wie Daten verwendet werden, die bei tatsächlichen Service-Integrationsaufrufen zurückgegeben werden. Auch, in diesem Beispiel wird die Ausgabe vonLambdaStatewird weitergegebenSQSStateals Eingabe.

    { "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 } } }, ... ] }