线程组
线程组
Thread Group:基础线程组
一、线程组介绍
路径:右键点击 测试计划 --> 添加 --> 线程(用户) --> 线程组

1. 简单理解
- 线程组是一个测试计划的开始点
- 在一个测试计划中的所有元件都必须在某个线程组下
- 线程组决定 Jmeter 执行测试计划的线程数
2. 主要作用
- 设置线程数
- 设置ramp-up时间
- 设置执行测试的循环次数
3. 独立性
每个线程都会独立的运行测试计划,互不干扰,多个线程用于模仿对服务器的并发访问。
二、属性详解

1. 在取样器错误后要执行的动作
动作 | 说明 |
---|---|
继续 | 忽略错误,继续执行 |
启动下一进程循环 | 忽略错误,线程当前循环终止,执行下一个循环 |
停止进程 | 当前线程停止执行,不影响其他线程正常执行 |
停止测试 | 整个测试会在所有当前正在执行的线程执行完毕后停止 |
立即停止测试 | 整个测试会立即停止执行,当前正在执行的取样器可能会被中断 |
提示
一般使用默认的【继续】即可,假设一个HTTP Sampler报错了,后面还有其他请求,最好是继续执行下去了。
2. 线程属性一(重点)
注意
设置的线程属性值是**【预期压力值】,而聚合报告是【压力测试的实际结果】**
(1)线程数
概念:Jmeter java进程下启动的线程,用来模拟真实并发用户数,1线程数 = 1用户数,每个线程将会完全独立地运行测试计划,互不干扰。
运行流程:在Jmeter中,先启动线程,再运行线程,后释放线程**【启动线程并运行,释放线程】**
提示
线程数建议不超过1000
注意
- windows下,2g的 java内存,1m 的栈空间,最大启动线程数=1000
- Linux下,2g的 java内存,1m 的栈空间,最大启动线程数=2000
(2)Ramp-Up时间(秒)
- 预期线程组的所有线程从【启动-运行-释放】的总时间
- ramp up=0时,表示瞬时加压,启动线程的时间无限趋近于0
注意
在负载测试的时候,尽量把ramp up设置大一些,让性能曲线平缓,容易找到瓶颈点。
提示
ramp-up时间用于设置启动所有线程所需要的时间。
例如:线程数设置为10,ramp-up时间设置为100秒,那么JMeter将使用100秒使10个线程启动并运行,每个线程将在前一个线程启动后的10秒启动。
如果ramp-up值设置得很小、线程数又设置得很大,刚开始执行测试时会对服务器产生很大的压力。
(3)循环次数
- 设置线程组中每个线程循环执行的次数;
- 如果选择永远,则一直执行下去,直到手动停止或达到调度器中的持续时间后停止。
示例场景

上图:10s 内启动并运行 10 个线程,一共启动 10 个线程,总共发送 20 个请求(10*2),每秒启动一个线程,然后运行两次
提示
如果 ramp-up 时间内,所有线程不能启动运行完的话,时间则会顺延下去
3. 线程属性二
(1)Same user on each iteration
默认勾选,表示在每次迭代中使用同一个用户,适用于基准测试,即在单个用户上测试应用程序的基本表现。
注意
在执行实际的性能测试时,应取消选中该复选框,以模拟多个用户并获得真实的负载测试结果。
(2)延迟创建线程直到需要
默认不勾选,表示测试开始的时候,所有线程就全部创建了。如果勾选,那么线程在需要用到的时候才创建。
延迟创建线程,直到线程被需要、采样器开始执行时才会被创建,避免资源浪费
官方英文
When selected, JMeter will allocate threads according to the ramp up times. Otherwise all threads are allocated to the JVM process the moment the test is started, regardless of ramp up time.
译文
选中后,JMeter将根据 Ramp-up 时间来分配线程。 否则,无论 Ramp-up 时间如何设定,所有线程都将在测试开始时分配给JVM进程。
(3)调度器

调度器的作用:控制每个线程组运行的持续时间以及它在多少秒后再启动
Duration (seconds):持续时间;线程组运行的持续时间
Startup Delay (seconds):启动延迟;测试计划开始后,线程组的线程将在多少秒后再启动运行
三、注意事项
1. 调度器
调度器和循环次数的关系
- 循环次数有固定值且 ≠ -1,持续时间不会生效,以循环次数为准
- 循环次数设置为永远或 -1 时,持续时间才会生效
调度器注意事项
当线程组运行完持续时间后,会**逐步释放线程,**不会一下子把所有线程释放掉,而释放线程也是需要时间的~
所以测试计划总的时间(右上角的时间)会 > 持续时间+启动延迟

2. Ramp-up 设置注意事项
Ramp-up需要设置足够长的时间来避免在测试刚开始时工作量过大
- 假如需要大量线程的话,不建议设置成0,0 属于瞬时加压**【过小的 ramp-up period 】**
- 如果设置 0,Jmeter 将在测试开始时就启动全部线程并立即发送请求,这样很容易让服务器达到饱满状态,且瞬间会增加很大的负载量,容易让服务器超载,这样是不合理的;
- 不合理的原因并不是因为平均压力值过高,而是因为所有线程都在初始状态时一起并发访问,从而引起不正常的初始访问峰值,可以通过 Jmeter 的聚合报告看到这种情况
Ramp-up还必须足够短,保证最后一个线程在第一个线程完成之前开始运行
- 如果 Ramp-up 过大,则会降低访问峰值的负载,即没有达到预期的压力峰值,无法获取准确的服务器最大负载情况**【过大的 ramp-up 时间 】**
- 具体的表现为:一些线程还没有启动,初期启动的部分线程已经结束了【导致实际并发量并会小于预期并发量】
如何确定一个合理的ramp-up 时间
- 首先,让初始点击率接近平均点击率,前提是确定合理的访问量
- 初始的 ramp-up 时间 = 平均点击率= 总线程/点击率;假如线程数=100,点击率=10次/s,则ramp-up period = 100/10 = 10s
四、预习TPS
- 总的完成请求数 = 线程总数 * 循环次数
- 平均TPS = 总请求数 / 线程运行总时间**【上图,右*上*角黄色三角形的时间】
- 平均TPS(即聚合报告的TPS)是仅供参考的
- 实际的TPS是由服务器决定的,因为它是衡量服务器处理能力的性能指标