JMeter事务控制器(Transaction controller)

本文介绍了JMeter性能测试工具中的事务控制器(Transaction Controller)的重要作用。通过实例演示了如何使用事务控制器来衡量整个页面加载时间及子请求的时间,并解释了在API测试中如何将多个请求视为一个整体事务的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你肯定知道, jmeter是一个跨系统平台的性能测试工具, 比如他可以在linux,freebsd,windows,solaris 等等各种系统上可以运行. 我可以说, 事务 transaction controller 控制器是jmeter作性能测试中最重要的. 让我来分享一些关于事物控制器的经验吧.

如果你看了录制jmeter脚本那一章, 你会知道jmeter会录制很多的子请求. 比如当打开首页后, 会继续打开图片, css等资源文件. 通常我们会剔除掉这些子请求, 但如果我需要衡量打开一个页面(包含所有子请求) 到底的性能, 请求时间如何时, 我们会计算包含所有子请求的数据. 这时我们必须使用事物控制器. ( 当然除了这种情况, 在进行api的测试时, 通常也需要事物控制器, 例如 假设api1 获取tgt, api2根据tgt 获取st, 假设该openauth 登陆的过程, 我们将这2步api的调用, 看做一次登陆成功. 那么我们需要将这2步操作,看为一个事务) .

让我们直接来看一个例子吧.

Transaction Controller_example

如上图, 有2个主要的http请求. 1个是主页请求, 主页请求又包含了4个子请求. 另外一个主请求是faq页面.

我添加了一个事务控制器(transaction controller), 将主页及其四个子请求都放在了该事务控制器下.

我进行了一次测试,看下聚合报告里的内容.

apache jmeter_transaction_Controller_result

你可以看到一个事务控制器的标签. 这个事务器则包含了(Home Page, .jpg request, .gif request, .png request, .js request) 这几个请求. 虽然我们把这几个请求的数据相加,可以得到类似于该控制器的数据. 但仅仅是相似而已.

事务控制器中的声称父sample(采样)的标志位的含义.

如果选中了该标志位, 则你不会看到事务控制器包含的所有子元素.

Generate parent_sample

Generate parent_sample_result

这时候, 再跑一次测试, 你再看聚合报告的时候, 会发现,我们只能看到"事务控制器" 和 FAQ 页面的测试报告数据了.

### JMeter 事务控制器概述 Apache JMeter 是一个强大的开源工具,专门用于负载测试和性能测试。逻辑控制器是 JMeter 中的重要组件之一,帮助用户定义请求的执行逻辑[^1]。 #### 配置与使用事务控制器 事务控制器属于逻辑控制器的一种,主要用于将多个 HTTP 请求组合成一个单一的事务,并对其进行计时。这有助于更精确地评估整个业务流程的响应时间以及吞吐量等指标[^4]。 为了创建并配置事务控制器: - **添加事务控制器** 在测试计划中的适当位置右键点击 -> 添加 -> 逻辑控制器 -> 事务控制器 - **设置属性** 可以为该控制器命名以便识别;勾选“生成父样本”选项可以让这个容器作为独立条目显示于监听器报告里,便于分析各个子项的整体表现情况。 ```xml <jmeterTestPlan version="1.2" properties="5.0"> <!-- ... --> <hashTree> <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="我的事务名称" enabled="true"> <boolProp name="TransactionController.includeTimers">false</boolProp> <boolProp name="TransactionController.parent">true</boolProp> <!-- 是否生成父样本 --> </TransactionController> <!-- 子级采样器或其他元件放置于此处 --> </hashTree> <!-- ... --> </jmeterTestPlan> ``` 上述 XML 片段展示了如何通过编辑 .jmx 文件来手动配置事务控制器的一些基本参数。 #### 实际应用案例 假设要模拟登录过程,则可以将提交用户名密码表单的动作和其他关联的操作都放在同一个事务内处理。这样不仅简化了脚本结构,而且能够更好地反映真实用户的交互行为模式。 ```plaintext Thread Group (线程组) ├── Transaction Controller "Login Process" │ ├── HTTP Request "Open Login Page" │ └── HTTP Request "Submit Credentials" └── ... ``` 在这个例子中,“Login Process”就是由两个HTTP请求组成的复合动作,而这两个请求被包裹在一个名为 “Login Process”的事务控制器之下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值