As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usando integrações de serviços simuladas para testes no Step Functions Local
No Step Functions Local, você pode testar os caminhos de execução de suas máquinas de estado sem realmente chamar serviços integrados usando integrações de serviços simuladas. Para configurar suas máquinas de estado para usar integrações de serviços simuladas, crie um arquivo de configuração simulado. Nesse arquivo, você define a saída desejada de suas integrações de serviços como respostas simuladas e as execuções que usam essas respostas para simular um caminho de execução como casos de teste.
Ao fornecer o arquivo de configuração simulado ao Step Functions Local, você pode testar as chamadas de integração de serviços executando máquinas de estado que usam as respostas simuladas especificadas nos casos de teste em vez de fazer chamadas reais de integração de serviços.
nota
Se você não especificar respostas de integração de serviços simulados no arquivo de configuração simulado, o Step Functions Local invocará a integração de AWS serviços usando o endpoint que você configurou ao configurar o Step Functions Local. Para obter informações sobre como configurar endpoints para Step Functions Local, consulte Definindo opções de configuração para Step Functions Local.
Este tópico usa vários conceitos definidos na lista a seguir.
Integrações de serviços simulados: refere-se aos estados de tarefas configurados para usar respostas simuladas em vez de realizar chamadas de serviço reais.
Respostas simuladas: refere-se aos dados simulados que os estados da tarefa podem ser configurados para usar.
Casos de teste: refere-se às execuções de máquinas de estado configuradas para usar integrações de serviços simuladas.
Arquivo de configuração simulado - refere-se ao arquivo de configuração simulado que contémJSON, que define integrações de serviços simulados, respostas simuladas e casos de teste.
Configurando integrações de serviços simuladas
Você pode simular qualquer integração de serviços usando o Step Functions Local. No entanto, o Step Functions Local não impõe que os mocks sejam iguais aos reais. APIs Uma tarefa simulada nunca chamará o endpoint do serviço. Se você não especificar uma resposta simulada, uma tarefa tentará chamar os endpoints do serviço. Além disso, o Step Functions Local gerará automaticamente um token de tarefa quando você simular uma tarefa usando o .waitForTaskToken
.
Etapa 1: especificar integrações de serviços simulados em um arquivo de configuração simulado
Você pode testar o Step Functions AWS SDK e as integrações de serviços otimizadas usando o Step Functions Local. A imagem a seguir mostra a máquina de estado definida na guia Definição de máquina de estado:
![Exemplo de integração de serviços simulada.](images/msi-graph.png)
Para fazer isso, você deve criar um arquivo de configuração simulado contendo seções conforme definido em Estrutura simulada do arquivo de configuração.
-
Crie um arquivo chamado
MockConfigFile.json
para configurar testes com integrações de serviços simuladas.O exemplo a seguir mostra um arquivo de configuração simulado referenciando uma máquina de estados com dois estados definidos chamados
LambdaState
eSQSState
.Você pode executar a definição da máquina de estado
LambdaSQSIntegration
referenciada no arquivo de configuração simulado usando um dos seguintes casos de teste:-
HappyPath
- Este teste simula a saída deLambdaState
eSQSState
usandoMockedLambdaSuccess
eMockedSQSSuccess
respectivamente.-
O
LambdaState
retorna o seguinte valor:"0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
-
O
SQSState
retorna o seguinte valor:"0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
-
-
RetryPath
- Este teste simula a saída deLambdaState
eSQSState
usandoMockedLambdaRetry
eMockedSQSSuccess
respectivamente. Além disso, oLambdaState
está configurado para realizar quatro tentativas de repetição. As respostas simuladas para essas tentativas são definidas e indexadas no estadoMockedLambdaRetry
.-
A tentativa inicial termina com uma falha de tarefa contendo uma causa e uma mensagem de erro, conforme mostrado no exemplo a seguir.
"0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
-
A primeira e a segunda tentativas terminam com uma falha de tarefa contendo uma causa e uma mensagem de erro, conforme mostrado no exemplo a seguir.
"1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
-
A terceira tentativa termina com uma tarefa bem-sucedida contendo o resultado do estado da seção Payload na resposta simulada do Lambda.
"3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
nota
Para estados com uma política de repetição, o Step Functions Local esgotará as tentativas de repetição definidas na política até receber uma resposta bem-sucedida. Isso significa que você deve indicar simulações para novas tentativas com números de tentativas consecutivos e deve abranger todas as tentativas antes de retornar uma resposta bem-sucedida.
Se você não especificar uma resposta simulada para uma tentativa de repetição específica, por exemplo, tentar novamente “3”, a execução da máquina de estado falhará.
-
-
HybridPath
- Este teste simula a saída deLambdaState
. Depois deLambdaState
ser executado com sucesso e receber dados simulados como resposta,SQSState
executa uma chamada de serviço real para o recurso especificado na produção.
Para obter informações sobre como iniciar execuções de teste com integrações de serviços simuladas, consulte Etapa 3: executar testes de integração de serviços simulados.
-
Certifique-se de que a estrutura das respostas simuladas esteja em conformidade com a estrutura das respostas de serviço reais que você recebe ao fazer chamadas de serviço integradas. Para obter informações sobre os requisitos estruturais para respostas simuladas, consulte Configurando integrações de serviços simuladas.
No exemplo anterior do arquivo de configuração simulado, as respostas simuladas são definidas em
MockedLambdaSuccess
eMockedLambdaRetry
está em conformidade com a estrutura das respostas reais que são retornadas da chamadaHelloFromLambda
.Importante
As respostas do serviço AWS podem variar em estrutura entre os diferentes serviços. O Step Functions Local não valida se as estruturas de resposta simuladas estão em conformidade com as estruturas reais de resposta do serviço. Você deve garantir que suas respostas simuladas estejam em conformidade com as respostas reais antes do teste. Para revisar a estrutura das respostas de serviço, você pode realizar as chamadas de serviço reais usando Step Functions ou visualizar a documentação desses serviços.
Etapa 2: forneça ao Step Functions Local o arquivo de configuração simulado
É possível fornecer o arquivo de configuração simulado ao Step Functions Local de uma das seguintes maneiras:
Etapa 3: executar testes de integração de serviços simulados
Depois de criar e fornecer um arquivo de configuração simulado ao Step Functions Local, execute a máquina de estado configurada no arquivo de configuração simulado usando integrações de serviços simuladas. Em seguida, verifique os resultados da execução usando uma API ação.
-
Crie uma máquina de estado com base na definição mencionada anteriormente no arquivo de configuração simulado.
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"
-
Execute a máquina de estado usando integrações de serviços simuladas.
Para usar o arquivo de configuração simulado, faça uma
StartExecution
API chamada em uma máquina de estado configurada no arquivo de configuração simulado. Para fazer isso, anexe o sufixo,#
, à máquina ARN de estado usada por.test_name
StartExecution
é um caso de teste, que é configurado para a máquina de estado no mesmo arquivo de configuração simulado.test_name
O comando a seguir é um exemplo que usa a máquina de estado
LambdaSQSIntegration
e a configuração simulada. Neste exemplo, a máquina de estadoLambdaSQSIntegration
é executada usando o testeHappyPath
definido em Etapa 1: especificar integrações de serviços simulados em um arquivo de configuração simulado. O testeHappyPath
contém a configuração da execução para lidar com chamadas simuladas de integração de serviços que os estadosLambdaState
eSQSState
fazem usando as respostas de serviço simuladasMockedLambdaSuccess
eMockedSQSSuccess
.aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
Veja a resposta de execução da máquina de estado.
A resposta à chamada
StartExecution
usando um teste simulado de integração de serviços é a mesma resposta à chamadaStartExecution
normal, que retorna a data de execução ARN e início.Veja a seguir um exemplo de resposta à chamada
StartExecution
usando o teste simulado de integração de serviços:{ "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
Verifique os resultados da execução fazendo uma
GetExecutionHistory
API chamadaListExecutions
DescribeExecution
, ou.aws stepfunctions get-execution-history \ --endpoint http://localhost:8083 \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices
O exemplo a seguir demonstra partes de uma resposta à chamada
GetExecutionHistory
usando a execução ARN do exemplo de resposta mostrado na etapa 2. Neste exemplo, a saída deLambdaState
eSQSState
são os dados simulados definidos no arquivo de configuração simuladoMockedLambdaSuccess
eMockedSQSSuccess
. Além disso, os dados simulados são usados da mesma forma que os dados retornados pela execução de chamadas reais de integração de serviços seriam usados. Além disso, neste exemplo, a saída deLambdaState
é passada aSQSState
como entrada.{ "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 } } }, ... ] }