模擬服務整合的組態檔 - AWS Step Functions

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

模擬服務整合的組態檔

要使用模擬服務集成,您必須首先創建一個名為MockConfigFile.json包含模擬配置的模擬配置文件。然後提供步驟函數本地與模擬配置文件。此配置文件定義了測試用例,其中包含使用模擬服務集成響應的模擬狀態。以下部分包含模擬配置結構的信息,其中包括模擬狀態和模擬響應:

引入模擬配置的結構

模擬配置是包含以下頂級字段的 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 時,你必須為每次調用指定一個模擬響應。回應必須包含名為ReturnThrow其值為模擬 Task 叫用的結果或錯誤輸出的單一欄位。如果未指定模擬回應,狀態機器執行將會失敗。

以下是MockedResponseThrowReturn物件的範例。在此範例中,執行狀態機器的前三次、傳回中"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必須與狀態機器RetryCatch區段中處理的錯誤相符。

以下是Throw物件的範例,其中包含用於呼叫 Lambda 函數Invoke的模擬回應:

"Throw": { "Error": "Lambda.TimeoutException", "Cause": "Lambda timed out." }

設定模擬服務整合

您可以模擬使用步驟功能本地任何服務集成。但是,步驟函數本地不會強制模擬與真實 API 相同。模擬任務永遠不會調用服務端點。如果您未指定模擬回應,Task 將嘗試呼叫服務端點。此外,當您使用模擬任務時,步驟函數本地將自動生成任務令牌.waitForTaskToken