一、什么是事务控制器?
在JMeter中,事务控制器(Transaction Controller)是一种逻辑控制器,用于将多个采样器(Sampler)组合在一起,并将它们作为一个单独的事务进行计时和报告。
1.1 为什么要用事务控制器?
性能测试的核心是模拟真实用户行为。用户的一个操作(如登录)往往包含多个HTTP请求:
请求登录页面
提交登录表单
跳转到登录成功页面
如果只关注单个请求的响应时间,就无法评估用户真实的体验。
事务控制器的作用:让你能回答“用户完成一次完整的登录操作,到底需要多长时间?”
1.2 生活化类比
一个HTTP请求= “服务员把汉堡拿给你”这个动作
一个事务控制器= 把“排队→点餐→付钱→等餐→取餐”整个流程打包在一起衡量
二、如何添加事务控制器?
操作路径:
text
右键点击线程组 → 添加 → 逻辑控制器 → 事务控制器
给事务控制器命名,如“用户登录操作”。
在事务控制器下添加采样器:
text
右键点击事务控制器 → 添加 → 采样器 → HTTP请求
三、核心配置选项详解
事务控制器有两个关键配置选项:
3.1 Generate Parent Sample(生成父样本)
| 勾选状态 | 效果 | 适用场景 |
|---|---|---|
| 勾选(推荐) | 只报告事务的整体结果,子请求被聚合 | 性能测试报告,聚焦业务性能 |
| 不勾选 | 事务和内部请求都会单独报告 | 调试定位问题,看哪个步骤慢了 |
勾选后的效果:在聚合报告中,你只会看到“用户登录操作”这一条记录,包含其总耗时。
不勾选的效果:既能看到“用户登录操作”,也能看到里面的“登录页请求”、“登录提交请求”等子请求。
3.2 Include duration of timer and pre-post processors
| 勾选状态 | 效果 |
|---|---|
| 勾选 | 将定时器(如思考时间)和前后置处理器的耗时也计入事务 |
| 不勾选(推荐) | 只计算采样器本身的执行时间 |
建议:通常不勾选此项,避免定时器等非系统处理时间干扰测试结果,获得更纯粹的系统处理时间。
四、完整配置示例
场景:用户登录系统并访问主页
Step 1:添加线程组
text
线程数:10 Ramp-Up时间:5秒 循环次数:1
Step 2:添加事务控制器
text
名称:用户登录并访问主页 勾选:Generate Parent Sample 不勾选:Include duration of timer...
Step 3:在事务控制器下添加HTTP请求
text
├── 事务控制器:用户登录并访问主页 │ ├── HTTP请求:登录页面 (GET /login) │ ├── HTTP请求:提交登录 (POST /login, 带用户名密码) │ └── HTTP请求:访问主页 (GET /home)
Step 4:添加监听器查看结果
汇总报告(Summary Report)
查看结果树(View Results Tree)
五、事务控制器与吞吐量的关系
如果你用了事务控制器,那“吞吐量达到200”指的就不是每秒200个请求,而是每秒200个完整的业务流程(如每秒200个用户成功完成登录)。
核心公式不变:
并发数 = 吞吐量 × 平均事务响应时间
例如,整个登录事务平均耗时0.5秒,要达到200 TPS,并发数需要:
text
并发数 = 200 × 0.5 = 100个线程
六、注意事项
事务控制器只有在其所有子采样器都执行成功的情况下才会显示成功
事务控制器可以嵌套,但需要合理设计层级,避免混淆
配合吞吐量定时器使用,可以精确控制目标TPS
七、总结
| 要点 | 说明 |
|---|---|
| 本质 | 把多个请求打包成一个“业务操作”来测总耗时 |
| 核心配置 | Generate Parent Sample决定看总账还是看明细 |
| 最佳实践 | 性能测试勾选父样本,调试时不勾选 |
| 价值 | 让你知道用户真实的等待时间,而不是零碎的小动作 |
一句总结:事务控制器 = 把多个请求打包成一个业务操作来测总耗时,让你知道用户真正的等待时间。