我不清楚JMeter中“线程组”的含义是什么。这是否意味着所有测试(Java 请求等)都属于在一个线程中运行的某个线程组,或者该线程组中的每个测试都在一个单独的线程中运行?我无法从 JMeter 文档或谷歌搜索中清楚地了解这一点。
4 回答
解释见:
Athread group
是一组执行相同场景的线程。设置配置中的迭代次数。一旦每个线程的迭代次数过去,线程行为是根据加速和销毁来定义的。
请注意,从 2.8 版开始,您将能够延迟创建线程,直到线程必须开始工作,这将适用于使用非常短寿命线程和许多线程的测试。
线程组可以看作是一组虚拟用户,但不一定。根据您开发测试的方式,它可以是其他东西。
据我了解(我想知道的),JMeter 线程组中的所有操作在每个线程和迭代中按顺序运行一次。因此,这意味着线程组中的每个操作都不会在其自己的单独线程集中运行,而是与线程组中的其他操作共享每个线程。
例如,
- 线程组 1
- 操作 1
- 操作 2
- 操作 3
如果我们安排这个线程组 Thread Group 1 在 3 个线程中运行,会发生什么,
- 操作 1、操作 2 和操作 3 将在线程 1 中执行。
- 操作 1、操作 2 和操作 3 将在线程 2 中执行。
- 操作 1、操作 2 和操作 3 将在线程 3 中执行。等等
以前我不确定这些操作中的每一个是否都在其自己的单独线程上运行。
线程 = 模拟用户。
所以线程组=用户。
查看jMeter Plugins 线程组控制器,它比默认线程组具有更多的控制权。
只是为了在我自己的调查之后进一步做出贡献(我希望清楚和完整):
- ThreadGroup 具有如上所述的请求/“操作”(在 Manjula Weerasinge 的摘要中),但也具有用户和循环配置。
- ThreadGroup 为每个用户创建一个线程。该线程(代表一个用户)在该循环中按顺序运行该线程组中的所有操作。
- 这些线程在所有循环中被重用——也就是说:循环 2 也将与 n 个不同的用户执行相同的操作集,但这将重用与循环 1 相同的线程。
总之,一个 ThreadGroup 每个用户都有一个线程,它用于运行该组中的所有测试,用于所有循环。
这在两个有 10 个用户的循环中是正确的,我的测试包含以下内容:
System.out.println("MyTest#testSearchNodeByNodeNameExactMatch: MyTest="
+this + "(" +System.identityHashCode(this) +")"
+", thread=" +System.identityHashCode(Thread.currentThread()));
并且可以使用以下方式汇总日志(假设 println 输出写入 thread-output.2.txt):
grep MyTest#test thread-output.2.txt | awk -F ', ' '{print $2}' | sort | uniq