曾经只有控制器在Jmeter中运行多次?

pra*_*ant 9 jmeter

我添加了两个请求登录以存储会话ID,另一个请求检查负载测试需要会话ID.我只将登录请求设置为一次,只需将其添加为仅限一次控制器的子项.但是当我通过添加大约100或200个线程测试它时,登录也运行了那么多时间.我想只运行启动线程的登录请求.可能吗?下面我添加了测试用例层次结构.

 ThreadGroup: 
 HTTP request default 
 HTTP cookie manager
     once only controller
 login HTTP request
 HTTP request for number of users 
Run Code Online (Sandbox Code Playgroud)

Bla*_*aff 29

"ONLY ONCE"控制器无法按照您的想法运行.

它只运行"一次"PER THREAD.因此,如果你有100个线程,它将运行100次.

如果您希望它运行ONCE PER TEST,请执行以下操作:

Test Plan (Set thread groups to "run consecutively"
 - Cookie Manager
 - Thread Group A (1 thread, 1 loop)
 - - -  Login Logic
 - Thread Group B
 - - - Rest of test
Run Code Online (Sandbox Code Playgroud)

请注意,如果您需要在线程组A和B之间共享任何变量,则需要将它们设置为属性.变量不能在线程组之间共享,但属性可以.您需要使用属性函数.

函数__setProperty自动将值存储为全局变量.最简单的启动__setProperty的方法是创建一个POST处理器Beanshell脚本作为在THREAD A中创建cookie的采样器的子项.要在THREAD B中检索值,可以将__property函数添加为参数的VALUE.需要cookie值.

Beanshell脚本看起来像这样:

props.put("COOKIENAME","COOKIEVALUE");   //creates a property "COOKIENAME" with value "COOKIEVALUE" 
print(props.get("COOKIENAME"));   //prints the value out to the console
Run Code Online (Sandbox Code Playgroud)

上面的代码对于COOKIENAME总是具有相同的值,少于想法.因此,我们需要确保"COOKIEVALUE"是动态的.我建议使用POST-PROCESSOR正则表达式来提取cookie值,然后将其传递给beanshell脚本.

所以,我们的测试计划现在看起来像这样:

Test Plan (Set thread groups to "run consecutively"
 - Thread Group A (1 thread, 1 loop)
 - - -  Login Logic
 - - - - -  Regex to grab cookie, store as "regexCookie"
 - - - - -  Beanshell to set property
 - Thread Group B
 - - - Rest of test
Run Code Online (Sandbox Code Playgroud)

我们的beanshell脚本现在看起来像:

props.put("COOKIENAME",vars.get("regexCookie"));   //creates a property "COOKIENAME" with value from "regexCookie"
print(props.get("COOKIENAME"));   //prints the value out to the console
Run Code Online (Sandbox Code Playgroud)

用户手册的链接:


Hug*_*aés 5

在新版本的 JMeter 中,您可以添加一个“setUp Thread Group”来满足您的需求。

一种特殊类型的线程组,可用于执行预测试操作。这些线程的行为与普通的线程组元素完全一样。不同之处在于这些类型的线程在测试继续执行常规线程组之前执行。

http://jmeter.apache.org/usermanual/component_reference.html#setUp_Thread_Group


小智 3

您可以将“登录 HTTP 请求”放在“仅一次”控制器中,将普通“HTTP 请求”放在“循环”控制器中。现在您可以设置循环执行 HTTP 请求 100 或 200 次。请参阅:jmeter.apache.org/usermanual/component_reference.html#Loop_Controller

使用计时器进行更真实的测试。假设您希望 200 个请求在 120 秒内发生,那么您可以让每个请求暂停 120/200 秒。大多数计时器都以毫秒为单位,因此您可以将这个数字设置为 (120/200 * 1000) 毫秒。请参阅:jmeter.apache.org/usermanual/component_reference.html#timers

您还可以创建一个单独的安装线程组,在其中进行登录并在另一个线程组中执行 200 个线程。查看这篇文章: http://www.informit.com/guides/content.aspx ?g=java&seqNum=520

所有这些信息应该可以帮助您朝着正确的方向前进。祝你好运!