本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
測試 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 中的執行歷史記錄,以查看詳細的操作日誌。使用追蹤來追蹤跨 服務的執行流程,並識別瓶頸。