Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo di integrazioni di servizi simulati
In Step Functions Local, puoi testare i percorsi di esecuzione delle tue macchine a stati senza chiamare effettivamente servizi integrati utilizzando integrazioni di servizi simulate. Per configurare le macchine a stati per utilizzare integrazioni di servizi simulate, create un file di configurazione fittizio. In questo file, definisci l'output desiderato delle integrazioni di servizio come risposte simulate e le esecuzioni che utilizzano le risposte simulate per simulare un percorso di esecuzione come casi di test.
Fornendo il file di configurazione fittizio a Step Functions Local, è possibile testare le chiamate di integrazione dei servizi eseguendo macchine a stati che utilizzano le risposte simulate specificate nei casi di test invece di effettuare chiamate di integrazione del servizio effettive.
Nota
Se non specifichi risposte simulate di integrazione del servizio nel file di configurazione fittizio, Step Functions Local invocherà l'integrazione del AWS servizio utilizzando l'endpoint configurato durante la configurazione di Step Functions Local. Per informazioni sulla configurazione degli endpoint per Step Functions Local, vedere. Impostazione delle opzioni di configurazione per Step Functions Local
Argomenti
- Concetti chiave in questo argomento
- Passaggio 1: specificare le integrazioni di servizi simulati in un file di configurazione fittizio
- Passaggio 2: fornire il file di configurazione fittizio a Step Functions Local
- Fase 3: Eseguire i test di integrazione dei servizi simulati
- File di configurazione per integrazioni di servizi fittizi
Concetti chiave in questo argomento
In questo argomento vengono utilizzati diversi concetti definiti nell'elenco seguente:
Integrazioni di servizi simulati: si riferisce agli stati delle attività configurati per utilizzare risposte simulate anziché eseguire chiamate di servizio effettive.
Risposte simulate: si riferisce a dati fittizi per i quali gli stati di Task possono essere configurati per l'utilizzo.
Casi di test: si riferisce alle esecuzioni di macchine a stati configurate per utilizzare integrazioni di servizi simulate.
File di configurazione fittizio: si riferisce al file di configurazione fittizio che contiene JSON, che definisce integrazioni di servizi simulate, risposte simulate e casi di test.
Passaggio 1: specificare le integrazioni di servizi simulati in un file di configurazione fittizio
Puoi testare Step Functions AWS SDK e integrazioni di servizi ottimizzate utilizzando Step Functions Local. L'immagine seguente mostra la macchina a stati definita nella scheda Definizione della macchina a stati:
A tale scopo, è necessario creare un file di configurazione fittizio contenente le sezioni definite in. Introduzione alla struttura della configurazione fittizia
-
Crea un file denominato
MockConfigFile.json
per configurare i test con integrazioni di servizi simulate.L'esempio seguente mostra un file di configurazione fittizio che fa riferimento a una macchina a stati con due stati definiti denominati and.
LambdaState
SQSState
È possibile eseguire la definizione della macchina a
LambdaSQSIntegration
stati a cui si fa riferimento nel file di configurazione fittizio utilizzando uno dei seguenti casi di test:-
HappyPath
- Questo test simula rispettivamente l'output e l'SQSState
utilizzoMockedLambdaSuccess
diLambdaState
e.MockedSQSSuccess
-
LambdaState
Restituirà il seguente valore:"0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
-
SQSState
Restituirà il seguente valore:"0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
-
-
RetryPath
- Questo test simulaMockedSQSSuccess
rispettivamente l'outputLambdaState
eSQSState
l'utilizzo diMockedLambdaRetry
e. Inoltre,LambdaState
è configurato per eseguire quattro tentativi di nuovo tentativo. Le risposte simulate per questi tentativi sono definite e indicizzate nello stato.MockedLambdaRetry
-
Il tentativo iniziale termina con un'operazione non riuscita contenente un messaggio di causa e di errore, come illustrato nell'esempio seguente:
"0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
-
Il primo e il secondo tentativo terminano con un errore dell'operazione contenente un messaggio di causa e di errore, come illustrato nell'esempio seguente:
"1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
-
Il terzo tentativo termina con un'operazione riuscita contenente il risultato dello stato della sezione Payload nella risposta Lambda simulata.
"3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
Nota
Per gli stati con una politica di nuovi tentativi, Step Functions Local esaurirà i tentativi di riprova impostati nella politica fino a quando non riceverà una risposta positiva. Ciò significa che, per i tentativi ripetuti, è necessario indicare un numero di tentativi consecutivi e includere tutti i tentativi ripetuti prima di restituire una risposta riuscita.
Se non si specifica una risposta simulata per un tentativo specifico, ad esempio, riprova «3", l'esecuzione della macchina a stati avrà esito negativo.
-
-
HybridPath
- Questo test simula l'output di.LambdaState
Dopo averLambdaState
eseguito correttamente e ricevuto dati simulati come risposta,SQSState
esegue una chiamata di servizio effettiva alla risorsa specificata in produzione.
Per informazioni su come avviare esecuzioni di test con integrazioni di servizi simulate, consulta. Fase 3: Eseguire i test di integrazione dei servizi simulati
-
Assicurati che la struttura delle risposte simulate sia conforme alla struttura delle risposte di servizio effettive che ricevi quando effettui chiamate di servizio integrate. Per informazioni sui requisiti strutturali per le risposte simulate, vedere. Configurazione di integrazioni di servizi fittizie
Nell'esempio precedente, il file di configurazione fittizio, le risposte simulate sono definite
MockedLambdaSuccess
e sonoMockedLambdaRetry
conformi alla struttura delle risposte effettive restituite dalla chiamata.HelloFromLambda
Importante
AWS le risposte al servizio possono variare nella struttura tra i diversi servizi. Step Functions Local non verifica se le strutture di risposta simulate sono conformi alle strutture di risposta del servizio effettive. È necessario assicurarsi che le risposte simulate siano conformi alle risposte effettive prima del test. Per esaminare la struttura delle risposte di servizio, è possibile eseguire le chiamate di servizio effettive utilizzando Step Functions o visualizzare la documentazione relativa a tali servizi.
Passaggio 2: fornire il file di configurazione fittizio a Step Functions Local
È possibile fornire il file di configurazione fittizio a Step Functions Local in uno dei seguenti modi:
Fase 3: Eseguire i test di integrazione dei servizi simulati
Dopo aver creato e fornito un file di configurazione fittizio a Step Functions Local, esegui la macchina a stati configurata nel file di configurazione fittizio utilizzando integrazioni di servizi fittizi. Quindi controlla i risultati dell'esecuzione utilizzando un'azione API.
-
Crea una macchina a stati basata sulla definizione menzionata in precedenza nel file di configurazione fittizio.
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"
-
Esegui la macchina a stati utilizzando integrazioni di servizi simulate.
Per utilizzare il file di configurazione fittizio, effettua una chiamata
StartExecution
API su una macchina a stati configurata nel file di configurazione fittizio. A tale scopo, aggiungi il suffisso,#
, all'ARN della macchina a stati utilizzata da.test_name
StartExecution
è un test case, configurato per la macchina a stati nello stesso file di configurazione fittizio.test_name
Il comando seguente è un esempio che utilizza la macchina a
LambdaSQSIntegration
stati e la configurazione fittizia. In questo esempio, la macchina aLambdaSQSIntegration
stati viene eseguita utilizzando ilHappyPath
test definito inPassaggio 1: specificare le integrazioni di servizi simulati in un file di configurazione fittizio. IlHappyPath
test contiene la configurazione per l'esecuzione per gestire le chiamate di integrazione di servizi fittizi effettuateLambdaState
eSQSState
dagli stati utilizzando le risposte delMockedLambdaSuccess
servizioMockedSQSSuccess
simulate.aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
Visualizza la risposta di esecuzione della macchina a stati.
La risposta alla chiamata
StartExecution
utilizzando un test di integrazione del servizio simulato è la stessa della risposta alla chiamataStartExecution
normale, che restituisce l'ARN di esecuzione e la data di inizio.Di seguito è riportato un esempio di risposta alla chiamata
StartExecution
utilizzando il test di integrazione del servizio simulato:{ "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
Controlla i risultati dell'esecuzione effettuando una chiamata
ListExecutions
DescribeExecution
, oGetExecutionHistory
API.aws stepfunctions get-execution-history \ --endpoint http://localhost:8083 \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices
L'esempio seguente mostra parti di una risposta alla chiamata
GetExecutionHistory
utilizzando l'ARN di esecuzione dalla risposta di esempio mostrata nel passaggio 2. In questo esempio, l'output diLambdaState
eSQSState
è costituito dai dati fittizi definiti nelMockedLambdaSuccess
eMockedSQSSuccess
nel file di configurazione fittizio. Inoltre, i dati simulati vengono utilizzati nello stesso modo in cui verrebbero utilizzati i dati restituiti eseguendo chiamate di integrazione dei servizi effettive. Inoltre, in questo esempio, l'output daLambdaState
viene passatoSQSState
come input.{ "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 } } }, ... ] }