JMeter中线程与控制器的关系

时间:2012-11-20 18:04:55

标签: java http web-applications jmeter load-testing

我正在研究JMeter并尝试理解这些概念。特别令我困惑的是线程与控制器 据我所知,一个线程代表一个用户,一个控制器是一个采样器的容器,并确定它们的执行 但是线程和控制器的关系是什么?线程是否执行所有作为线程组子节点的控制器?
因此,一个线程(简化)调用每个控制器,然后控制器触发样本? 但是,例如,在我的线程组中指定循环计数为20并使用While Controller来触发请求20次之间的区别是什么?
有任何帮助可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您理解,Thread表示用户,Controller是Samplers的容器并确定其执行。

是的,它是否执行(如果控制器在IfController中)所有控制器都是子级。

是一个线程(简化)调用每个控制器,然后控制器触发样本。

但是,例如,在我的线程组中指定循环计数为20和使用While Controller来触发请求20次之间的区别是什么? 它是非常类似的,许多人添加一个WhileController,而只是设置循环计数就足够了。

如果要在主迭代中重复一组样本,通常需要一个While控制器。

阅读JMeter Component ReferenceElements of a Test Plan

另请阅读Scoping Rules以了解配置元素的应用方式。

答案 1 :(得分:1)

它就像Java一样。 线程表示执行线程控制器代表控制结构。因此,如果您想确定您对测试应用程序施加了多少压力,那么主要的是线程数量。每个线程按顺序执行其子节点。如果你想多次测试同一个东西,对于控制器是你的伙伴,如果你想并行执行,你需要线程(具有给定线程数的线程组)。


您需要了解的一个主要区别是图片,当您想要参数化测试时

例如,您有一个Web应用程序,并且您有100个演示用户。每个用户只能登录一次。这种情况下你需要一些东西,告诉你的测试线程,他们应该使用哪个用户。这通常是CVS Data Set,可以在某种程度上使用,线程可以为自己获取一行,并使用它。您也可以这样说,当CSV中没有更多行时,您的测试应该停止。使用for循环或其他控制器更难实现相同的概念(为for循环中的每次迭代提供一个数据)。