기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Step Functions Local에서의 테스트를 위한 모의 서비스 통합 사용
Step Functions Local에서 모의 서비스 통합을 사용하여 통합 서비스를 실제로 직접적으로 호출하지 않고도 상태 시스템의 실행 경로를 테스트할 수 있습니다. 모의 서비스 통합을 사용하도록 상태 시스템을 구성하려면 모의 구성 파일을 만듭니다. 이 파일에서는 서비스 통합의 원하는 출력을 모의 응답으로 정의하고 모의 응답을 사용하여 실행 경로를 테스트 사례로 시뮬레이션하는 실행을 정의합니다.
Step Functions Local에 모의 구성 파일을 제공하면 실제 서비스 통합을 직접적으로 호출하지 않고 테스트 사례에 지정된 모의 응답을 사용하는 상태 시스템을 실행하여 서비스 통합 직접 호출을 테스트할 수 있습니다.
참고
모의 구성 파일에 모의 서비스 통합 응답을 지정하지 않는 경우 Step Functions Local은 다음을 호출합니다. AWS Step Functions Local을 설정하는 동안 구성한 엔드포인트를 사용한 서비스 통합. Step Functions Local의 엔드포인트 구성 방법은 Step Functions Local의 구성 옵션 설정 섹션을 참조하세요.
이 주제에서는 다음 목록에 정의된 몇 가지 개념을 사용합니다.
모의 서비스 통합 - 실제 서비스를 직접적으로 호출하는 대신 모의 응답을 사용하도록 구성된 Task 상태를 나타냅니다.
모의 응답 - Task 상태가 사용하도록 구성될 수 있는 모의 데이터를 나타냅니다.
테스트 사례 - 모의 서비스 통합을 사용하도록 구성된 상태 시스템 실행을 나타냅니다.
모의 구성 파일 - 모의 서비스 통합JSON, 모의 응답 및 테스트 사례를 정의하는 내용이 들어 있는 모의 구성 파일을 말합니다.
모의 서비스 통합 구성
Step Functions Local을 사용하여 모든 서비스 통합을 모의할 수 있습니다. 하지만 Step Functions Local은 모의 객체가 실제와 같도록 강제하지 않습니다. APIs 모의 Task는 서비스 엔드포인트를 직접적으로 호출하지 않습니다. 모의 응답을 지정하지 않으면 Task는 서비스 엔드포인트를 직접적으로 호출하려고 시도합니다. 또한 Step Functions Local은 .waitForTaskToken
을 사용하여 Task를 모의할 때 자동으로 작업 토큰을 생성합니다.
1단계: 모의 구성 파일에 모의 서비스 통합 지정
Step Functions를 테스트할 수 있습니다. AWS SDKStep Functions Local을 사용하여 서비스 통합을 최적화했습니다. 다음 이미지에서는 상태 시스템 정의 탭에 정의된 상태 시스템을 보여줍니다.
이렇게 하려면 모의 구성 파일 구조에 정의된 섹션이 포함된 모의 구성 파일을 만들어야 합니다.
-
MockConfigFile.json
파일을 만들어 모의 서비스 통합으로 테스트를 구성합니다.다음 예제에서는
LambdaState
및SQSState
라는 정의된 상태 2개가 있는 상태 시스템을 참조하는 모의 구성 파일을 보여줍니다.다음 테스트 사례 중 하나를 사용하여 모의 구성 파일에 참조된
LambdaSQSIntegration
상태 시스템 정의를 실행할 수 있습니다.-
HappyPath
- 이 테스트에서는MockedLambdaSuccess
및MockedSQSSuccess
를 각각 사용하여LambdaState
및SQSState
의 출력을 모의합니다.-
LambdaState
는 다음 값을 반환합니다."0":{ "Return":{ "StatusCode":200, "Payload":{ "StatusCode":200, "body":"Hello from Lambda!" } } }
-
SQSState
는 다음 값을 반환합니다."0":{ "Return":{ "MD5OfMessageBody":"3bcb6e8e-7h85-4375-b0bc-1a59812c6e51", "MessageId":"3bcb6e8e-8b51-4375-b0bc-1a59812c6e51" } }
-
-
RetryPath
- 이 테스트에서는MockedLambdaRetry
및MockedSQSSuccess
를 각각 사용하여LambdaState
및SQSState
의 출력을 모의합니다. 또한LambdaState
는 재시도를 4회 수행하도록 구성되어 있습니다. 이러한 시도에 대한 모의 응답은MockedLambdaRetry
상태에서 정의되고 인덱싱됩니다.-
초기 시도는 다음 예제와 같이 원인과 오류 메시지가 포함된 작업 실패로 끝납니다.
"0":{ "Throw": { "Error": "Lambda.ResourceNotReadyException", "Cause": "Lambda resource is not ready." } }
-
첫 번째 및 두 번째 재시도는 다음 예제와 같이 원인과 오류 메시지가 포함된 작업 실패로 끝납니다.
"1-2":{ "Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." } }
-
세 번째 재시도는 모의 Lambda 응답의 Payload 섹션의 상태 결과가 포함된 작업 성공으로 끝납니다.
"3":{ "Return": { "StatusCode": 200, "Payload": { "StatusCode": 200, "body": "Hello from Lambda!" } } }
참고
재시도 정책이 있는 상태의 경우 Step Functions Local은 성공 응답을 수신할 때까지 정책에 설정된 재시도 횟수를 모두 활용합니다. 즉, 연속 시도 횟수가 있는 재시도에 대해서는 모의로 표시해야 하며 성공 응답을 반환하기 전의 모든 재시도 횟수를 포함해야 합니다.
특정 재시도(예: 재시도 “3”)에 모의 응답을 지정하지 않으면 상태 시스템 실행이 실패합니다.
-
-
HybridPath
- 이 테스트는LambdaState
출력을 모의합니다.LambdaState
가 성공적으로 실행되고 모의 데이터를 응답으로 수신한 후에SQSState
는 프로덕션에 지정된 리소스에 대한 실제 서비스를 직접적으로 호출합니다.
모의 서비스 통합으로 테스트 실행을 시작하는 방법은 3단계: 모의 서비스 통합 테스트 실행 섹션을 참조하세요.
-
모의 응답 구조가 통합 서비스를 직접적으로 호출할 때 수신한 실제 서비스 응답 구조를 따르는지 확인합니다. 모의 응답의 구조적 요구 사항은 모의 서비스 통합 구성 섹션을 참조하세요.
이전 예제 모의 구성 파일에서는
MockedLambdaSuccess
및MockedLambdaRetry
에 정의된 모의 응답이HelloFromLambda
직접 호출에서 반환되는 실제 응답 구조를 따릅니다.중요
AWS 서비스 응답은 서비스마다 구조가 다를 수 있습니다. Step Functions Local은 모의 응답 구조가 실제 서비스 응답 구조를 따르는지 검증하지 않습니다. 테스트하기 전에 모의 응답이 실제 응답을 따르는지 확인해야 합니다. 서비스 응답 구조를 검토하려면 Step Functions를 사용하여 실제 서비스를 직접적으로 호출하거나 해당 서비스에 대한 설명서를 보면 됩니다.
2단계: Step Functions Local에 모의 구성 파일 제공
다음 방법 중 하나로 Step Functions Local에 모의 구성 파일을 제공할 수 있습니다.
3단계: 모의 서비스 통합 테스트 실행
모의 구성 파일을 만들어 Step Functions Local에 제공한 후 모의 서비스 통합을 사용하여 모의 구성 파일에 구성된 상태 시스템을 실행합니다. 그런 다음 API 액션을 사용하여 실행 결과를 확인합니다.
-
앞서 언급한 모의 구성 파일의 정의를 기반으로 상태 시스템을 만듭니다.
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"
-
모의 서비스 통합을 사용하여 상태 시스템을 실행합니다.
모의 구성 파일을 사용하려면 모의 구성 파일에 구성된 상태 머신을
StartExecution
API 호출하십시오. 이렇게 하려면 에서 사용하는 스테이트 머신에 접미사#
, 를 추가하십시오. ARNtest_name
StartExecution
동일한 모의 구성 파일에서 상태 머신에 대해 구성된 테스트 케이스입니다.test_name
다음 명령은
LambdaSQSIntegration
상태 시스템과 모의 구성을 사용하는 예제입니다. 이 예시에서LambdaSQSIntegration
상태 시스템은 1단계: 모의 구성 파일에 모의 서비스 통합 지정에 정의된HappyPath
테스트를 통해 실행됩니다.HappyPath
테스트에는LambdaState
및SQSState
상태에서MockedLambdaSuccess
및MockedSQSSuccess
모의 서비스 응답을 사용하여 수행하는 모의 서비스 통합 직접 호출을 처리하기 위한 실행 구성이 포함되어 있습니다.aws stepfunctions start-execution \ --endpoint http://localhost:8083 \ --name executionWithHappyPathMockedServices \ --state-machine arn:aws:states:us-east-1:123456789012:stateMachine:LambdaSQSIntegration#HappyPath
상태 시스템 실행 응답을 봅니다.
모의 서비스 통합 테스트를
StartExecution
사용한 호출에 대한 응답은 실행 날짜와 시작 날짜를 반환하는StartExecution
정상 호출에 대한 ARN 응답과 동일합니다.다음은 모의 서비스 통합 테스트를 사용한
StartExecution
직접 호출에 대한 응답의 예제입니다.{ "startDate":"2022-01-28T15:03:16.981000-05:00", "executionArn":"arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices" }
ListExecutions
DescribeExecution
, 또는GetExecutionHistory
API 호출을 통해 실행 결과를 확인합니다.aws stepfunctions get-execution-history \ --endpoint http://localhost:8083 \ --execution-arn arn:aws:states:us-east-1:123456789012:execution:LambdaSQSIntegration:executionWithHappyPathMockedServices
다음 예제는 2단계에 표시된 예제 응답의 실행을
GetExecutionHistory
ARN 사용하여 호출에 대한 응답의 일부를 보여줍니다. 이 예제에서LambdaState
및SQSState
의 출력은 모의 구성 파일의MockedLambdaSuccess
및MockedSQSSuccess
에 정의된 모의 데이터입니다. 또한 모의 데이터는 실제 서비스 통합을 직접적으로 호출하여 반환된 데이터를 사용하는 방식과 동일한 방식으로 사용됩니다. 또한 이 예제에서는LambdaState
의 출력이 입력으로SQSState
에 전달됩니다.{ "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 } } }, ... ] }