本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
模拟服务集成的配置文件
要使用模拟服务集成,必须首先创建名为的模拟配置文件MockConfigFile.json
包含你的模拟配置。然后为 Step Functions Local 提供模拟配置文件。此配置文件定义了测试用例,其中包含使用模拟服务集成响应的模拟状态。以下部分包含有关模拟配置结构的信息,其中包括模拟状态和模拟响应:
介绍模拟配置的结构
模拟配置是包含以下顶级字段的 JSON 对象:
-
StateMachines
-此对象的字段表示配置为使用模拟服务集成的状态机。 -
MockedResponse
-此对象的字段表示服务集成调用的模拟响应。
以下是模拟配置文件的示例:其中包括StateMachine
定义与MockedResponse
.
{
"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
这些区域有:StateMachines
对象定义哪些状态机将使用模拟服务集成。每个状态机的配置都表示为StateMachines
. 字段名称是状态机的名称,值是包含单个名为的字段的对象TestCases
,其字段代表该状态机的测试用例。
以下语法显示包含两个测试用例的状态机:
"MyStateMachine": {
"TestCases": {
"HappyPath": {
...
},
"SadPath": {
...
}
}
测试案例
的字段与TestCases
表示状态机的单个测试用例。每个状态机的每个测试用例的名称必须是唯一的,每个测试用例的值都是一个对象,指定要用于状态机中的任务状态的模拟响应。
以下示例是TestCase
链接二Task
状态到两个MockedResponses
:
"HappyPath": {
"SomeTaskState": "SomeMockedResponse",
"AnotherTaskState": "AnotherMockedResponse"
}
模拟响应
MockedResponses
是一个包含多个具有唯一字段名称的模拟响应对象的对象。模拟响应对象定义每次调用模拟任务状态的成功结果或错误输出。您可以使用单个整数字符串(例如 “0”、“1”、“2” 和 “3”)或包含的整数范围(例如 “0-1”、“2-3”)来指定调用编号。
当你模拟任务时,必须为每次调用指定模拟响应。响应必须包含名为的单个字段Return
要么Throw
其值是模拟任务调用的结果或错误输出。如果不指定模拟响应,状态机执行将失败。
以下是一个示例:MockedResponse
和Throw
和Return
对象。在此示例中,状态机运行的前三次,即中指定的响应"0-2"
返回状态机第四次运行时,将返回中指定的响应"3"
返回。
"SomeMockedResponse": {
"0-2": {
"Throw": {
...
}
},
"3": {
"Return": {
...
}
}
}
如果您使用的是Map
状态,并希望确保对Map
状态,设置值maxConcurrency
到 1. 如果设置的值大于 1,Step Functions Local 将同时运行多个迭代,这将导致各次迭代中状态的整体执行顺序不可预测。这可能会进一步导致 Step Functions Local 在一次执行到下一次执行时使用不同的模拟响应来处理迭代状态。
Return
Return
表示为MockedResponse
对象。它指定了模拟任务状态的成功结果。
以下是一个示例:Return
包含用于调用的模拟响应的对象Invoke
在 Lambda 函数中:
"Return": {
"StatusCode": 200,
"Payload": {
"StatusCode": 200,
"body": "Hello from Lambda!"
}
}
投掷
Throw
表示为MockedResponse
对象。它指定了错误输出失败的任务。的价值Throw
必须是包含Error
和Cause
带有字符串值的字段。此外,您在中指定的字符串值Error
中的字段MockConfigFile.json
必须与中处理的错误匹配Retry
和Catch
状态机的部分。
以下是一个示例:Throw
包含用于调用的模拟响应的对象Invoke
在 Lambda 函数中:
"Throw": {
"Error": "Lambda.TimeoutException",
"Cause": "Lambda timed out."
}
配置模拟服务集成
您可以使用 Step Functions Local 模拟任何服务集成。但是,Step Functions Local 不会强制模拟与真正的 API 相同。模拟的任务永远不会调用服务终端节点。如果不指定模拟响应,任务将尝试调用服务终端节点。此外,当你使用模拟任务时,Step Functions Local 将自动生成任务令牌.waitForTaskToken
.