如何查看Serverless Artillery的slsart invoke命令执行结果?
Serverless Artillery负载测试问题排查与结果解读
问题概述
执行slsart invoke命令后,已部署的Lambda成功触发并向目标端点生成负载,但存在以下问题:
- CLI运行结束后未生成测试报告,无法找到结果查看入口;
- 负载触发Lambda多次调用,结果按单次调用拆分,难以进行整体解读;
- 当配置
duration: 120时,终端仅输出undefined且无结果,而duration: 60的配置可正常在终端输出结果。
相关配置示例
phases: - duration: 60 arrivalRate: 10 rampTo: 10
命令执行输出示例
$$ ~/load-test|⇒ slsart invoke --stage dev -V [8/11/22 | 11:27:18] Invoking test Lambda Serverless version is 1.40.0, compatible version is '^1.0.3' Your function has been invoked. The load is scheduled to be completed in 138 seconds. undefined $$
解决方案
1. 测试结果的查看位置
- 本地日志文件:检查项目根目录下的
artillery-report.json或serverless-artillery-output.json文件,所有测试请求的详细数据(响应时间、状态码、错误信息等)都会写入该文件。 - AWS CloudWatch日志:Lambda的每一次执行日志都会同步到CloudWatch对应日志组(路径为
/aws/lambda/<你的Lambda函数名称>),可在AWS控制台的CloudWatch服务中查看、筛选和聚合这些日志。
2. 聚合解读多次调用结果的方法
- 本地JSON报告分析:使用
jq命令行工具对本地报告文件进行聚合统计,快速获取整体指标:# 查看聚合后的核心指标(平均响应时间、错误率等) cat artillery-report.json | jq '.aggregate' - CloudWatch日志洞察:通过CloudWatch日志功能的自定义查询语句,聚合多次调用的结果,示例查询:
stats avg(@duration) as 平均响应时间, count(*) as 总调用数, count_if(@message like /Error/) as 错误数 - 生成可视化HTML报告:在测试配置中添加
report字段,指定生成HTML格式的可视化报告,便于直观查看聚合数据:config: target: "你的目标端点地址" phases: - duration: 60 arrivalRate: 10 rampTo: 10 report: format: html output: artillery-load-test-report.html
3. 解决duration:120时输出undefined的问题
- 升级Serverless Artillery版本:旧版本可能存在长时长测试的bug,执行以下命令升级到最新稳定版:
npm install -g serverless-artillery - 调整Lambda超时时间:确保Lambda函数的超时时间大于测试时长,避免函数提前终止导致报告生成失败,在
serverless.yml中修改:functions: loadTest: handler: handler.test timeout: 180 # 设置为180秒,大于120秒的测试时长 - 开启调试日志定位问题:执行命令时添加
--debug参数,查看详细执行日志,找出undefined输出的具体原因:slsart invoke --stage dev -V --debug
内容的提问来源于stack exchange,提问作者sP_
相关产品推荐
相关产品推荐

