Jmeter--多个线程组顺序执行和并行执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter--多个线程组顺序执行和并行执行相关的知识,希望对你有一定的参考价值。
参考技术A 本期目标: 理解Thread Groups的顺序执行与并行执行控制因子:Run Thread Groups consecutively(i.e.one at time)
预期结论:
1、勾选 Run Thread Groups consecutively(i.e.one at time),则表示顺序执行。顺序执行,指的是测试计划中存在多个线程组时,第一个线程组执行完后再执行下一个线程组。
2、不勾选 Run Thread Groups consecutively(i.e.one at time),则表示并行执行。并行执行,指的是指的是测试计划中存在多个线程组时,所有线程组都在同一时刻执行
1、windows系统 + jmeter
2、xampp + phpwind
1.1、点击Test plan,name输入框输入:Thread Groups Test Plan
1.2、勾选Run Thread Groups consecutively(i.e.one at time)选项
2.1、选中Test Plan,单击鼠标右键,Add ->Threads -> Thread Group。
2.1.1、在新添加的Thread Group 页面:
name: First Thread Group
Loop Count: 2
3.1、选中上一步骤添加的Thread Group: First Thread Group,单击鼠标右键,Add -> Sampler -> HTTP Request
3.2、接上一步,修改HTTP Request的信息:
Name: tucool request
Server Name or IP:127.0.0.1
Port: 8022(自己搭建环境的端口号)
Method: GET
Path: /phpwind/upload/html/channel/tucool
注:/phpwind/upload, 是我搭建phpwind的主页路径
4.1、 选中First Thread Group,并复制。
4.2、选中Thread Groups Test Plan,并粘贴。此时会生成和First Thread Group一样名字的线程组
4.3、单击第二个线程组:
Name: Second Thread Group
4.4、展开Second Thread Group,鼠标单击HTTP Request:
Name:由tucool request 改成cms request
Path: /phpwind/upload/index.php
Parameters列表点击Add按钮:
name: m
Values: cms
5.1、选中First Thread Group ,鼠标单击右键,点击Add Think Times to children
5.2、点击Think time:
Action: Pause
Duration : 1000
注:为啥要加Think time,是为了看效果,看啥效果呢。
6.1、选中 Thread Groups Test Plan,鼠标单击右键,Add -> Listener -> View Results Tree
顺序执行时,结果树的执行顺序是:(loop count=2)
tucool request[loop 1] -> tucool request[loop 2] -> cms request[loop 1] -> cms request[loop 2]
并行执行时,结果树的执行顺序是:
首先、tucool request[loop 1] 、cms request[loop 1] (runned at on time)
然后、cms request[loop 2] -> tucool request[loop 2]
注:如果还是想不懂的话,反复清空结果树,多执行几次,然后观察,得出自己的结论(理解透彻)。别人的结论不一定是正确的。
ps:感觉网络还行,图片又不大,就是上传图片上传不了。。。
Jmeter 1 线程组和多个 HttpRequest
【中文标题】Jmeter 1 线程组和多个 HttpRequest【英文标题】:Jmeter 1 Thread Group and Multiple HttpRequest 【发布时间】:2019-09-21 17:07:26 【问题描述】:我有以下 Jmeter 配置
1 线程组,线程数为 1,在我定义的这 4 个 HttpRequest 下。循环计数为forever
。
我的问题是我的请求将如何被触发?由于我在我们的线程组中定义了1 as number of threads
,它会顺序触发上述4个请求还是并行触发?
如果我在我们的线程组中定义了2 as number of threads
,那么请求将如何被触发呢?
为简单起见,假设加速时间为 0。
【问题讨论】:
据我所知,线程数为 1,调用将是连续的,如果线程 t 为 4,它们将是并行的 【参考方案1】:在同一个线程中,除非你使用Parallel Controller
,否则请求是按顺序执行的
如果你有多个线程,它会根据ramp up period执行线程,如果设置为零,所有线程将同时启动,注意理论上它们可以顺序执行请求,但大多是零星的。
您可以使用Synchronizing Timer控制线程
SyncTimer 的目的是阻塞线程,直到 X 个线程被阻塞,然后它们都被立即释放
【讨论】:
当您说they can execute requests sequentially, but mostly sporadically
时,您的意思是 - 并行但不同时?我无法理解sporadically
@BreakingBenjamin 操作系统决定何时在线程之间切换,线程可以完成其操作然后切换到其他线程
我的循环计数器是无限的。因此,假设一个线程组中的所有 2 个线程同时启动(加速时间 0),那么它们会触发请求 - parallel
或 sequentially
或 sequentially but not in order
?
@BreakingBenjamin 线程将并行运行,您会看到请求的顺序是零星的
你能看看这个***.com/questions/58066367/…。这是上面的延续。【参考方案2】:
每个线程都将完整地执行测试计划,并且完全独立于其他测试线程。多个线程用于模拟与服务器应用程序的并发连接。
更多详情请参考
https://jmeter.apache.org/usermanual/test_plan.html
【讨论】:
以上是关于Jmeter--多个线程组顺序执行和并行执行的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在Jmeter的单个测试计划中并行运行两个线程组吗?