我添加了两个请求登录以存储会话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)
用户手册的链接:
在新版本的 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
所有这些信息应该可以帮助您朝着正确的方向前进。祝你好运!