測試 Lambda 耐用函數 - AWS Lambda

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

測試 Lambda 耐用函數

AWS 為耐用函數提供專用測試 SDKs,可讓您在本機和雲端執行和檢查執行。為您的語言安裝測試 SDK:

TypeScript
npm install --save-dev @aws/aws-durable-execution-sdk-js-testing

如需完整的文件和範例,請參閱 GitHub 上的 TypeScript 測試 SDK

Python
pip install aws-durable-execution-sdk-python-testing

如需完整的文件和範例,請參閱 GitHub 上的 Python 測試 SDK

測試 SDK 提供兩種測試模式:快速單元測試的本機測試,以及針對已部署函數的整合測試的雲端測試。

本機測試

本機測試會在開發環境中執行您的耐久函數,而不需要部署的資源。測試執行器會直接執行函數程式碼,並擷取所有要檢查的操作。

針對單元測試、測試驅動的開發和 CI/CD 管道使用本機測試。測試會在本機執行,無需網路延遲或額外費用。

測試範例:

TypeScript
import { withDurableExecution } from '@aws/aws-durable-execution-sdk-js'; import { DurableFunctionTestRunner } from '@aws/aws-durable-execution-sdk-js-testing'; const handler = withDurableExecution(async (event, context) => { const result = await context.step('calculate', async () => { return event.a + event.b; }); return result; }); test('addition works correctly', async () => { const runner = new DurableFunctionTestRunner({ handler }); const result = await runner.run({ a: 5, b: 3 }); expect(result.status).toBe('SUCCEEDED'); expect(result.result).toBe(8); const step = result.getStep('calculate'); expect(step.result).toBe(8); });
Python
from aws_durable_execution_sdk_python import durable_execution, DurableContext from aws_durable_execution_sdk_python_testing import DurableFunctionTestRunner from aws_durable_execution_sdk_python.execution import InvocationStatus @durable_execution def handler(event: dict, context: DurableContext) -> int: result = context.step(lambda _: event["a"] + event["b"], name="calculate") return result def test_addition(): runner = DurableFunctionTestRunner(handler=handler) with runner: result = runner.run(input={"a": 5, "b": 3}, timeout=10) assert result.status is InvocationStatus.SUCCEEDED assert result.result == 8 step = result.get_step("calculate") assert step.result == 8

測試執行器會擷取執行狀態,包括最終結果、個別步驟結果、等待操作、回呼和任何錯誤。您可以依名稱檢查操作,或逐一查看所有操作,以驗證執行行為。

執行存放區

測試 SDK 使用執行存放區來保留測試執行資料。根據預設,測試會使用快速且不需要清除的記憶體內存放區。若要偵錯或分析執行歷史記錄,您可以使用將執行儲存為 JSON 檔案的檔案系統存放區。

記憶體內存放區 (預設):

記憶體內存放區會在測試執行期間將執行資料保留在記憶體中。當測試完成時,資料會遺失,因此非常適合標準單元測試和 CI/CD 管道,您不需要在測試完成後檢查執行。

檔案系統存放區:

檔案系統存放區會將執行資料保留為 JSON 檔案至磁碟。每個執行都會儲存在個別的檔案中,以便在測試完成後輕鬆檢查執行歷史記錄。在偵錯複雜測試失敗或分析執行模式時,請使用 檔案系統存放區。

使用環境變數設定存放區:

# Use filesystem store export AWS_DEX_STORE_TYPE=filesystem export AWS_DEX_STORE_PATH=./test-executions # Run tests pytest tests/

執行檔案會以已淨化的名稱存放,並包含完整的執行狀態,包括操作、檢查點和結果。如果儲存目錄不存在,檔案系統存放區會自動建立儲存目錄。

雲端測試

雲端測試會叫用 中部署的耐用函數 AWS ,並使用 Lambda API 擷取其執行歷史記錄。使用雲端測試,透過真正的 AWS 服務和組態來驗證類似生產環境中的行為。

雲端測試需要已部署的函數和 AWS 登入資料,具有叫用函數和讀取執行歷史記錄的許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetDurableExecution", "lambda:GetDurableExecutionHistory" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" } ] }

雲端測試範例:

TypeScript
import { DurableFunctionCloudTestRunner } from '@aws/aws-durable-execution-sdk-js-testing'; test('deployed function processes orders', async () => { const runner = new DurableFunctionCloudTestRunner({ functionName: 'order-processor', region: 'us-east-1' }); const result = await runner.run({ orderId: 'order-123' }); expect(result.status).toBe('SUCCEEDED'); expect(result.result.status).toBe('completed'); });
Python
from aws_durable_execution_sdk_python_testing import ( DurableFunctionCloudTestRunner, DurableFunctionCloudTestRunnerConfig ) def test_deployed_function(): config = DurableFunctionCloudTestRunnerConfig( function_name="order-processor", region="us-east-1" ) runner = DurableFunctionCloudTestRunner(config=config) result = runner.run(input={"orderId": "order-123"}) assert result.status is InvocationStatus.SUCCEEDED assert result.result["status"] == "completed"

雲端測試會叫用實際部署的函數,並從中擷取執行歷史記錄 AWS。這可讓您驗證與其他 AWS 服務的整合、驗證效能特性,以及使用類似生產的資料和組態進行測試。

測試項目

透過驗證執行結果、操作行為和錯誤處理來測試耐用的函數。專注於商業邏輯正確性,而不是實作詳細資訊。

驗證執行結果:檢查函數是否傳回指定輸入的預期值。測試成功執行和錯誤案例,以確保函數適當地處理無效的輸入。

檢查操作執行:確認步驟、等待和回呼如預期般執行。檢查步驟結果,以確保中繼操作產生正確的值。驗證等待操作是否設定適當的逾時,以及回呼是否使用正確的設定建立。

測試錯誤處理:當指定無效的輸入時,使用描述性錯誤訊息來驗證函數是否正確失敗。模擬暫時性失敗並確認操作重試正確,以測試重試行為。檢查永久故障是否不會觸發不必要的重試。

驗證工作流程:對於多步驟工作流程,驗證操作以正確的順序執行。測試條件式分支,以確保不同的執行路徑正常運作。驗證平行操作同時執行並產生預期結果。

SDK 文件儲存庫包含廣泛的測試模式範例,包括多步驟工作流程、錯誤案例、逾時處理和輪詢模式。

測試策略

在開發期間和 CI/CD 管道中使用單元測試的本機測試。本機測試會快速執行,不需要 AWS 登入資料,並提供程式碼變更的立即意見回饋。撰寫本機測試,以驗證商業邏輯、錯誤處理和操作行為。

在部署到生產環境之前,使用雲端測試進行整合測試。雲端測試會驗證具有真實 AWS 服務和組態的行為、驗證效能特性,以及測試end-to-end工作流程。在預備環境中執行雲端測試,以便在整合問題到達生產環境之前加以發現。

在本機測試中模擬外部相依性,以隔離函數邏輯並保持快速測試。使用雲端測試來驗證與資料庫、APIs和其他 服務等外部 AWS 服務的實際整合。

撰寫重點測試來驗證一個特定行為。使用描述性測試名稱來說明正在測試的內容。將相關測試分組在一起,並針對常見的設定程式碼使用測試固定裝置。保持簡單的測試,並避免難以理解的複雜測試邏輯。

偵錯失敗

當測試失敗時,請檢查執行結果以了解發生錯誤。檢查執行狀態,以查看函數是否成功、失敗或逾時。讀取錯誤訊息以了解失敗原因。

檢查個別操作結果,找出行為偏離預期的位置。檢查步驟結果以查看產生了哪些值。驗證操作排序,以確認依預期順序執行的操作。計數操作以確保建立正確數量的步驟、等待和回呼。

常見問題包括可在重播時產生不同結果的非確定性程式碼、透過重播期間中斷的全域變數共用狀態,以及因條件式邏輯錯誤而缺少操作。使用標準除錯器和記錄來逐步執行函數程式碼和追蹤執行流程。

對於雲端測試,請檢查 CloudWatch Logs 中的執行歷史記錄,以查看詳細的操作日誌。使用追蹤來追蹤跨 服務的執行流程,並識別瓶頸。