如何使用JMeter对含双POST请求的AWS API开展负载与性能测试
JMeter实现AWS API Gateway双POST链路负载测试落地方案
前置准备
- 确认两个POST接口的完整路径、鉴权规则:AWS API Gateway默认要求
Content-Type: application/json请求头,若开启IAM鉴权、自定义API Key鉴权,提前准备好对应凭证 - 准备测试参数集:多并发场景下提前将
propno、apikey、user三类参数整理为CSV文件,避免单账号、单资源ID触发接口限流 - 本地安装JMeter 5.6及以上版本,若接口开启IAM鉴权,提前安装AWS SigV4授权插件
测试链路搭建
基础配置
- 新建测试计划,添加线程组,根据负载目标配置并发线程数、Ramp-Up爬升时长、循环次数;做稳定性测试时可直接配置调度器,设置持续压测时长
- 在线程组下添加HTTP信息头管理器,统一配置公共请求头:
Content-Type: application/json # 自定义鉴权头、签名头统一在此处添加 - (可选)需要参数化时,在线程组下添加CSV数据文件设置,导入提前准备的CSV参数文件,给每列映射变量名
propno、apikey、user,配置文件读完后自动循环读取即可
第一个POST接口配置(提交申请获取参考编号)
- 在线程组下添加HTTP请求采样器,命名为「第一步-提交请求获取reference」
- 采样器基础配置:
- 协议选
https(AWS API Gateway默认支持HTTPS协议) - 服务器地址填API Gateway的调用域名,格式类似
{api-id}.execute-api.{region}.amazonaws.com - 路径填第一个POST接口的资源路径,例如
/v1/submit - 请求方法选择
POST - 消息体填入JSON请求参数,参数化部分用
${变量名}替换:{ "propno": "${propno}", "apikey": "${apikey}", "user": "${user}" }
- 协议选
- 给该采样器添加响应断言,校验响应内容包含
"status":"ok",接口返回异常时直接终止当前线程的后续流程,避免无效请求 - 给该采样器添加JSON提取器,配置规则如下:
- 引用名称设置为
refno,供后续接口直接调用 - JSON路径表达式填
$.reference - 匹配数字填
1,取第一个匹配的返回值 - 默认值填
REF_EXTRACT_FAILED,提取失败时方便定位问题
- 引用名称设置为
第二个POST接口配置(传入参考编号获取最终结果)
- 在第一个采样器后添加第二个HTTP请求采样器,命名为「第二步-传入refno获取最终结果」
- 基础配置和第一个采样器保持一致,路径填第二个POST接口对应的资源路径,请求方法选
POST - 消息体填入JSON请求参数,直接引用前一步提取的
refno变量:{ "refno": "${refno}", "apikey": "${apikey}", "user": "${user}" } - (可选)给该采样器添加响应断言,根据业务实际返回的成功标识配置校验规则,例如校验返回包含指定业务字段,避免将异常响应统计为成功请求
监听器配置
- 调试阶段添加「查看结果树」,可逐次查看每个请求的入参、返回值、变量提取结果,确认链路跑通;正式压测时关闭该监听器,避免占用过多客户端资源
- 添加「聚合报告」,统计两个接口的平均响应时间、95/99分位响应时间、吞吐量、错误率等核心性能指标
- 添加「响应时间图」,直观观测压测过程中接口响应时间的波动趋势
AWS API Gateway适配注意事项
- 接口开启IAM鉴权时,无需手动编写签名逻辑,直接在HTTP请求的授权配置中选择AWS Signature类型,填入对应AK/SK、区域信息,服务名填
execute-api即可 - 提前确认API Gateway的账号配额:默认Regional类型API的限流阈值是10000RPS/账号/区域,若压测流量超过该阈值,提前提交配额申请,否则会触发429限流,影响测试结果准确性
- 若第二步接口为异步查询逻辑(提交第一步请求后reference不会立刻生效),可在两个请求之间添加常数定时器配置轮询间隔,或搭配While控制器设置最大重试次数,避免第一步请求刚处理完成就调用第二步,返回查询不到的错误
压测执行建议
- 先配置1个线程、循环1次做链路调试,通过查看结果树确认两个请求返回正常、
refno提取和传参正确,再逐步提升并发数 - 正式压测使用JMeter非GUI模式启动,减少JMeter本身的性能损耗,启动命令示例:
jmeter -n -t api-test.jmx -l test-result.jtl - 压测过程中同步查看AWS CloudWatch中API Gateway的监控指标,和JMeter本地统计的指标做交叉验证,排除客户端网络、JMeter本身性能瓶颈导致的结果偏差
内容的提问来源于stack exchange,提问作者vincent
相关产品推荐
相关产品推荐

