JMeter业务流程压测

返回

JMeter业务流程压测

一、什么是业务流程压测

业务流程压测,是指按照真实用户的操作路径,把多个接口串起来进行压测。

例如电商系统中,一个真实用户可能会这样操作:

登录
→ 浏览商品
→ 查看商品详情
→ 加入购物车
→ 提交订单
→ 支付

如果你只压其中一个“下单接口”,结果往往不真实,因为真实业务中:

  • 下单前要登录
  • 下单前要查商品
  • 下单时要校验库存
  • 下单后可能还要支付

所以:

业务流程压测,本质上是在模拟真实用户行为链路,而不是单个接口。


二、为什么单接口压测不够

很多初学者一开始只会这样做:

1000个线程
一直压 /api/order/create

这样虽然能测出接口极限,但不能代表真实生产流量。

原因有几个:

1. 缺少上下文依赖

真实请求通常依赖前置数据,例如:

  • token 来自登录
  • productId 来自商品查询
  • cartId 来自购物车接口
  • orderId 来自下单接口

如果这些前置步骤没有执行,单压一个接口的数据就不完整。

2. 流量结构失真

真实业务中,不同接口流量占比不同。

例如电商系统:

浏览商品 70%
查看详情 20%
下单 8%
支付 2%

如果你只压支付接口,就完全不符合线上情况。

3. 瓶颈判断会偏差

真实链路里,瓶颈可能不在你压的那个接口,而在链路前后的依赖系统中,例如:

  • 登录服务
  • 商品服务
  • Redis
  • 数据库
  • 消息队列

所以企业级压测必须做 流程压测


三、业务流程压测的目标

业务流程压测主要解决以下问题:

1. 验证系统整体链路性能

不是只看某一个接口,而是看完整流程能否跑通、是否稳定。

2. 模拟真实业务流量结构

让压测更接近线上真实访问模式。

3. 发现跨服务瓶颈

例如:

  • 登录很快,但下单很慢
  • 下单很快,但支付依赖第三方导致整体 RT 高
  • 某一步数据库锁竞争严重

4. 评估系统端到端承载能力

例如:

系统每秒能支撑多少真实下单用户

这个比单接口 QPS 更有业务价值。


四、JMeter业务流程压测的基本结构

一个典型的业务流程压测脚本,结构通常是:

Test Plan
 └ Thread Group
     ├ CSV Data Set Config
     ├ HTTP Header Manager
     ├ Login API
     │   └ JSON Extractor(token)
     ├ Search Product API
     │   └ JSON Extractor(productId)
     ├ Add Cart API
     │   └ JSON Extractor(cartId)
     ├ Create Order API
     │   └ JSON Extractor(orderId)
     ├ Pay API
     ├ Assertions
     └ Listeners

这里面你会发现,前面学过的内容全都串起来了:

  • 参数化
  • 关联
  • 请求头管理
  • 断言
  • 监听器

所以第 10 篇,其实是在整合前面第 6 到第 9 篇的能力。


五、一个真实电商流程示例

下面我们用一个简化的电商流程来说明。

步骤1:登录

请求:

POST /api/login

返回:

{
  "code": 200,
  "token": "abc-token"
}

处理方式:

  • 使用 JSON Extractor 提取 token
  • 保存为 ${token}

步骤2:查询商品列表

请求:

GET /api/product/list
Authorization: Bearer ${token}

返回:

{
  "code": 200,
  "data": [
    { "productId": 1001 },
    { "productId": 1002 }
  ]
}

处理方式:

  • 提取 productId
  • 保存为 ${productId}

步骤3:加入购物车

请求:

POST /api/cart/add
Authorization: Bearer ${token}

{
  "productId": "${productId}",
  "count": 1
}

返回:

{
  "code": 200,
  "cartId": "cart123"
}

处理方式:

  • 提取 cartId
  • 保存为 ${cartId}

步骤4:创建订单

请求:

POST /api/order/create
Authorization: Bearer ${token}

{
  "cartId": "${cartId}"
}

返回:

{
  "code": 200,
  "orderId": "order999"
}

处理方式:

  • 提取 orderId
  • 保存为 ${orderId}

步骤5:支付

请求:

POST /api/pay
Authorization: Bearer ${token}

{
  "orderId": "${orderId}"
}

六、如何设计真实的流量比例

企业里做流程压测时,不是每个步骤都按 100% 执行。

因为真实用户行为不是完全一致的。

例如:

登录 100%
浏览商品 100%
加入购物车 30%
下单 10%
支付 8%

也就是说:

  • 100 个人登录
  • 100 个人浏览
  • 30 个人加入购物车
  • 10 个人下单
  • 8 个人支付

这才更接近真实业务。

在 JMeter 中,这类比例控制通常通过以下方式实现:

  • Throughput Controller
  • If Controller
  • Random Controller

七、常见控制器在流程压测中的作用

1. Simple Controller

用于组织脚本结构,让流程更清晰。

例如:

登录模块
商品模块
订单模块
支付模块

2. Transaction Controller

用于统计一整段业务流程的总耗时。

例如:

下单流程总耗时
= 加购 + 创建订单 + 支付

这在企业里非常重要,因为老板和业务方往往关心的是:

一个完整下单流程耗时多少

而不是某个单独接口耗时多少。

3. Throughput Controller

用于控制某一分支执行比例。

例如:

30%用户加入购物车
10%用户下单

这个组件是做业务流量建模的关键。


八、事务与单接口的区别

在流程压测里,要区分两种指标:

1. 接口级指标

例如:

  • 登录接口 RT
  • 查询商品 RT
  • 下单接口 RT

2. 事务级指标

例如:

  • 登录到下单整条链路耗时
  • 下单到支付完整事务耗时

企业里通常两者都要看:

  • 接口级指标用于定位瓶颈
  • 事务级指标用于衡量业务体验

九、企业级脚本设计原则

做业务流程压测时,建议遵循以下原则。

1. 尽量贴近真实用户行为

不要为了图省事,把流程压成一个接口。

2. 数据必须真实可用

例如:

  • 登录账号足够多
  • 商品数据足够多
  • 库存数据不能全一样
  • 避免所有线程抢同一个订单号

3. 每一步都要校验结果

例如:

  • 登录是否成功
  • 商品是否查到
  • 购物车是否创建成功
  • 订单是否创建成功

否则前一步失败,后面全是脏数据。

4. 不要忽略思考时间

真实用户操作之间通常有停顿,例如:

  • 登录后会浏览几秒
  • 看商品详情要几秒
  • 确认订单也要时间

所以可以通过 Timer 模拟 think time。

例如:

浏览商品后等待 2~5 秒

5. 要能分模块定位问题

如果流程太大、结构太乱,出了问题很难定位。

建议把脚本拆成模块:

登录模块
商品模块
购物车模块
订单模块
支付模块

十、业务流程压测常见问题

1. 前置接口失败,后续全部失败

例如登录失败后没有 token,后面所有接口都 401。

解决方式:

  • 增加断言
  • 增加调试监听器
  • 在失败时中断当前线程逻辑

2. 数据被重复消费

例如:

  • 同一个商品库存被抢光
  • 同一个订单被重复支付
  • 同一个用户重复提交

解决方式:

  • 做好测试数据隔离
  • 使用唯一 ID
  • 准备充足测试数据

3. 流量模型不合理

例如所有用户都直接下单,没有浏览行为。

这样虽然压测能跑,但与真实业务严重不符。

4. 压测结果无法解释

例如流程整体 RT 高,但不知道是哪一步慢。

解决方式:

  • 同时看事务级和接口级指标
  • 给关键步骤加 Transaction Controller
  • 配合服务端监控一起看

十一、一个推荐的电商压测模型

你可以先用一个简单版本练手:

场景A:普通用户浏览

登录 → 浏览商品列表 → 查看详情

占比:

70%

场景B:购物车用户

登录 → 浏览商品 → 加入购物车

占比:

20%

场景C:下单用户

登录 → 浏览商品 → 加购 → 下单

占比:

8%

场景D:支付用户

登录 → 浏览商品 → 加购 → 下单 → 支付

占比:

2%

这是一个很典型的企业流量模型雏形。


十二、总结

JMeter 业务流程压测,是把多个接口按照真实业务顺序串联起来进行压测。

它相比单接口压测,更接近企业真实场景,因为它能模拟:

  • 真实用户行为
  • 真实数据依赖
  • 真实流量比例
  • 真实业务链路

一个完整流程压测通常会结合这些能力:

  • 参数化
  • 接口关联
  • 断言
  • Timer
  • Controller
  • 事务统计

掌握业务流程压测后,你就已经不再是“只会压单接口”的初级阶段,而是开始具备 企业级压测脚本设计能力