1. Serverless 函数(AWS Lambda/Cloud Functions)的测试策略,冷启动、超时、并发限制的测试方法?
请阐述对 AWS Lambda 或 Google Cloud Functions 等 Serverless 函数进行测试时,冷启动延迟、执行超时与并发限制这三个关键特性的测试策略与测试方法?
- 冷启动(Cold Start)的成因与量化测试方法
- 超时阈值的设定与超时行为验证
- 并发限制(Reserved Concurrency)对吞吐与错误的影响
Serverless 函数测试应区分"单元/逻辑测试"与"平台行为测试"。逻辑层面用单元测试覆盖函数内部业务,用本地模拟(如 SAM Local、Serverless Offline)验证事件接入与响应;平台行为(冷启动、超时、并发)必须在真实环境或接近真实环境验证。冷启动测试:预热后测量首次调用延迟并对比暖调用延迟,统计 P50/P95/P99 冷启动耗时,关注内存配置对冷启动的影响(更大内存通常 CPU 更强、冷启动更快)。超时测试:设置短超时(如 3s)故意让函数 sleep 超过阈值,验证返回 504/超时错误、日志记录、以及是否被计入重试。并发测试:通过压测工具(如 Artillery、k6、Locust)并发加压,观察突破并发配额时出现 429 Throttle 错误、事件进入队列、消息被丢弃或重试的行为,并验证 Reserved Concurrency 与 Provisioned Concurrency 的配置对吞吐的影响。
Serverless 的核心特征是"平台托管运行时",这决定了函数逻辑与平台行为必须分开测试:业务逻辑可控、可快速验证,而冷启动/超时/并发是平台侧属性,依赖真实运行时与配额,模拟环境无法忠实复现。测试的价值在于提前暴露"函数在平台约束下会怎样表现",而不仅是"函数逻辑对不对"。
// 冷启动与超时压测(k6)摘要
import http from 'k6/http';
export const options = {
scenarios: {
concurrency: {
executor: 'ramping-vus',
startVUs: 0,
stages: [{ duration: '30s', target: 200 }],
},
},
};
export default function () {
const res = http.post('http://api.example.com/invoke', JSON.stringify({ task: 'demo' }));
// 冷启动通常表现为首次响应 P95 显著偏高
if (res.status === 429) console.log('throttled');
if (res.status === 504) console.log('timeout');
}