本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Step Functions 中模擬服務集成的配置文件
要使用模擬服務集成,您必須首先創建一個名為MockConfigFile.json
包含模擬配置的模擬配置文件。然後提供 Step Functions 本地與模擬配置文件。此配置文件定義了測試用例,其中包含使用模擬服務集成響應的模擬狀態。以下部分包含模擬配置結構的信息,其中包括模擬狀態和模擬響應:
模擬配置文件結構
模擬配置是包含以下頂級字段的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!"
}
}
}
}
}
}
模擬配置字段參考
下列各節說明您必須在 mock 組態中定義的頂層物件欄位。
StateMachines
StateMachines
物件會定義哪些狀態機器將使用模擬服務整合。每個狀態機的組態都以的最上層欄位表示StateMachines
。字段名稱是狀態機的名稱,value 是包含一個名為的單個字段的對象TestCases
,其字段代表該狀態機的測試用例。
以下語法顯示了具有兩個測試用例的狀態機:
"MyStateMachine": {
"TestCases": {
"HappyPath": {
...
},
"SadPath": {
...
}
}
TestCases
的欄位代TestCases
表狀態機器的個別測試案例。每個狀態機器的每個測試用例的名稱必須是唯一的,每個測試用例的值是一個對象,指定用於狀態機中任務狀態的模擬響應。
以下實例將兩個狀態TestCase
鏈接到兩個Task
狀態MockedResponses
:
"HappyPath": {
"SomeTaskState": "SomeMockedResponse",
"AnotherTaskState": "AnotherMockedResponse"
}
MockedResponses
MockedResponses
是一個包含多個具有唯一字段名稱的模擬響應對象的對象。模擬響應對象定義了模擬任務狀態的每次調用成功的結果或錯誤輸出。您可以使用個別的整數字串 (例如「0」、「1」、「2」和「3」) 或包含整數 (例如「0-1」、「2-3」) 來指定叫用編號。
當你模擬一個 Task 時,你必須為每次調用指定一個模擬響應。回應必須包含名為Return
或Throw
其值為模擬 Task 叫用的結果或錯誤輸出的單一欄位。如果未指定模擬回應,狀態機器執行將會失敗。
以下是MockedResponse
與Throw
和Return
物件的範例。在此範例中,執行狀態機器的前三次、傳回中"0-2"
指定的回應,而第四次執行狀態機時,會傳回中指定"3"
的回應。
"SomeMockedResponse": {
"0-2": {
"Throw": {
...
}
},
"3": {
"Return": {
...
}
}
}
注意
如果您正在使用Map
狀態,並且想要確保Map
狀態的可預測回應,請將值設定maxConcurrency
為 1。如果您設定大於 1 的值,Step Functions Local 會同時執行多個反覆項目,這會導致反覆運算間狀態的整體執行順序無法預測。這可能會進一步導致 Step Functions Local 對從一個執行到下一個執行的迭代狀態使用不同的模擬響應。
傳回
Return
表示為MockedResponse
物件的欄位。它指定了一個模擬任務狀態的成功結果。
以下是Return
物件的範例,其中包含用於呼叫 Lambda 函數Invoke
的模擬回應:
"Return": {
"StatusCode": 200,
"Payload": {
"StatusCode": 200,
"body": "Hello from Lambda!"
}
}
投擲
Throw
表示為MockedResponse
物件的欄位。它指定一個失敗的任務的錯誤輸出。的值Throw
必須是包含Error
和具有字串值之Cause
欄位的物件。此外,您在Error
欄位中指定的字串值MockConfigFile.json
必須與狀態機器Retry
和Catch
區段中處理的錯誤相符。
以下是Throw
物件的範例,其中包含用於呼叫 Lambda 函數Invoke
的模擬回應:
"Throw": {
"Error": "Lambda.TimeoutException",
"Cause": "Lambda timed out."
}