

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

# 測試 Lambda Web 函數
<a name="web-functions-testing"></a>

Web 函數會執行標準 HTTP 伺服器，因此您可以使用架構的一般工具在本機測試大多數應用程式行為。仍然需要雲端測試來驗證 IAM 授權、Amazon S3 和 AWS Key Management Service (AWS KMS) 存取、Web 函數生命週期狀態、擴展、遙測和多區域行為。

## 建議的測試層
<a name="web-functions-testing-strategy"></a>

下表說明每個測試層、驗證的內容，以及執行的位置。


| 測試層 | 它驗證的內容 | 執行位置 | 
| --- | --- | --- | 
| 單位 | 商業邏輯、驗證、授權決策、序列化和錯誤處理。 | 本機開發和建置環境。 | 
| HTTP 整合 | 路由、中介軟體、標頭、串流、逾時、正常中斷連線和架構行為。 | 針對本機執行的生產伺服器。 | 
| 套件 | 項目檔案、生產相依性、封存配置、啟動，以及伺服器對 的使用AWS\_LAMBDA\_HTTP\_ENDPOINT。 | 從部署管道上傳的確切封存。 | 
| 雲端整合 | IAM、儲存貯體政策、金鑰、生命週期狀態、端點行為、遙測和下游 AWS 服務呼叫。 | 在隔離 AWS 帳戶 或測試環境中。 | 
| 載入和恢復能力 | 並行安全、延遲、限流、下游限制、回復和區域故障行為。 | 在類似生產的雲端環境中，具有明確的成本和流量控制。 | 

## 在本機執行 HTTP 伺服器
<a name="web-functions-testing-local"></a>

使用 的本機備用`AWS_LAMBDA_HTTP_ENDPOINT`，如 所示[最少Express的應用程式](web-functions-samples.md#web-functions-samples-express)。您也可以明確設定變數，以測試 Lambda 所使用的相同啟動路徑：

```
AWS_LAMBDA_HTTP_ENDPOINT=127.0.0.1:3000 node index.js
```

使用一般 HTTP 用戶端傳送請求，並驗證狀態碼、回應內文、標頭、請求驗證、身分驗證中介軟體、逾時、串流和用戶端中斷連線處理。

在本機整合測試期間執行並行請求。檢查全域請求狀態、共用可變快取、重複初始化、檔案名稱衝突和事件迴圈封鎖。

## 測試部署套件
<a name="web-functions-testing-package"></a>

1. 從遞交的鎖定檔案安裝相依性，並使用與部署管道相同的命令建立封存。

1. 將封存解壓縮至乾淨的目錄。從該目錄執行應用程式，而無法存取開發相依性或未追蹤的來源檔案。

1. 確認設定的項目檔案存在於預期的路徑，並啟動 HTTP 伺服器。

1. 記錄存檔檢查總和和和修訂版所使用的 Amazon S3 物件版本 ID。使用這些值來識別測試中的確切成品。

Web 函數在 Arm64 上執行。當套件包含原生相依性時，請為 Linux Arm64 建置和測試這些相依性，而不是重複使用 x86-64 開發電腦的成品。例如，您可以在 Arm64 容器中安裝生產相依性：

```
docker run --rm --platform linux/arm64 \
    --volume "$PWD":/app \
    --workdir /app \
    node:24 \
    npm ci --omit=dev
```

## 在隔離的雲端環境中進行測試
<a name="web-functions-testing-cloud"></a>

1. 將測試的封存上傳至版本控制的 Amazon S3 儲存貯體，並建立參考產生物件版本的修訂。

1. 輪詢修訂，直到變成 `Active`或 為止`Failed`。測試失敗，回報為 ，`stateReason`而不是無限期等待。

1. 建立或更新測試端點。輪詢 `state`和 `updateStatus`。對於 `MultiRegion`和 `PerRegion`端點，驗證每個區域狀態。

1. 將請求傳送至端點，並驗證應用程式回應、`lambda-web-request-id`、日誌、指標和預期的下游副作用。

1. 當測試完成時，刪除端點、函數、測試物件、日誌群組和其他測試資源。

## 測試授權和暴露
<a name="web-functions-testing-security"></a>
+ 對於 `IamAuth`，確認未簽署的請求失敗、允許的主體成功、拒絕的主體失敗，以及跨帳戶存取需要身分和資源政策。
+ 對於 `ApplicationManaged`，測試遺失、過期、格式不正確和不足的應用程式登入資料。與身分驗證分開測試授權。
+ 當瀏覽器呼叫端點時，測試瀏覽器預檢請求、允許和拒絕的原始伺服器、憑證請求和安全標頭。
+ 當前門保護端點時，請確認直接原始伺服器請求遭拒，而且只有預期的前門身分或網路路徑可以叫用它。

## 測試並行、擴展和限流
<a name="web-functions-testing-load"></a>
+ 逐漸增加負載，同時記錄延遲、4xx 和 5xx 回應、調節、作用中環境和下游使用率。
+ `maxConcurrencyPerEnvironment` 獨立測試設定的 `maxEnvironments`、 `rateLimit`和 。使用`lambda-web-error-type`回應標頭 (`Platform.EndpointRequestThrottle`、`Platform.AccountRequestThrottle`、`Platform.AccountActiveVCPUArm64Throttle`、 `Platform.EndpointMaxEnvThrottle`或 `Platform.EndpointConcurrentInitThrottle`) 來確認產生每個 HTTP 429 回應的限制。記錄沒有個別`lambda-web-error-type`標頭的 HTTP 503 回應。這些回應可能表示暫時載入卸載或內部錯誤。如需詳細資訊，請參閱[Web 函數錯誤類型](web-functions-troubleshooting.md#web-functions-troubleshooting-error-types)。
+ 測試流量爆量和冷啟動，不只是穩定狀態輸送量。
+ 使用唯一的測試資料和冪等鍵。請勿在負載測試期間自動重試非等冪請求。
+ 在開始負載測試之前，設定明確的流量、持續時間和成本限制。協調可能影響共用帳戶配額或下游系統的測試。

## 測試部署和復原
<a name="web-functions-testing-deployments"></a>

在測試環境中，部署兩個修訂，並執行與生產中使用的相同加權路由程序。確認您的日誌或自訂指標可以將請求歸因於每個修訂。刻意觸發復原條件、將所有流量還原至先前的修訂版，並確認其程式碼物件和相依性仍然可用。

對於 `MultiRegion`或 `PerRegion`端點，測試部分更新失敗，並確認部署自動化偵測到失敗的區域狀態。測試復原動作，並在更正原因後重複端點更新。