JMeter-为什么仅一次控制器运行多次
我添加了两个请求,一个用于登录以存储会话id,另一个用于检查需要会话id的负载测试JMeter-为什么仅一次控制器运行多次,jmeter,Jmeter,我添加了两个请求,一个用于登录以存储会话id,另一个用于检查需要会话id的负载测试 ThreadGroup: HTTP request default HTTP cookie manager once only controller login HTTP request HTTP request for number of users 通过将其添加为一次性控制器的子级,我以一次性方式发出了登录请求 ThreadGroup: HTTP request defaul
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
通过将其添加为一次性控制器的子级,我以一次性方式发出了登录请求
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
但是当我通过添加大约100或200个线程来测试它时,登录也运行了那么多时间。我只想为启动线程运行登录请求。可能吗?下面我添加了我的测试用例层次结构
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
您可以将“登录HTTP请求”放在一次性控制器中,将正常的“HTTP请求”放在循环控制器中。现在,您可以将循环设置为执行HTTP请求100或200次。见:
jmeter.apache.org/usermanual/component_reference.html#Loop_Controller
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
使用计时器进行更真实的测试。假设您希望200个请求在120秒内发生,那么您可以让每个请求暂停120/200秒。大多数计时器都是以毫秒为单位工作的,因此您可以将该数字设为(120/200*1000)毫秒。见:
jmeter.apache.org/usermanual/component_reference.html#timers
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
您还可以创建一个单独的安装线程组,在其中登录,并在另一个线程组中执行200个线程。检查这篇文章:
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
所有这些信息都将帮助您朝着正确的方向前进。祝你好运 只有一次的控制器不能像你想象的那样工作
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
每个线程“只运行一次”。因此,如果您有100个线程,它将运行100次
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
如果希望每个测试运行一次,请执行以下操作:
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
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
请注意,如果需要在线程组A和B之间共享任何变量,则需要将它们设置为属性。变量不能在线程组之间共享,但属性可以。您需要为此使用properties函数
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
函数_setProperty会自动将该值存储为全局变量。启动_setProperty最干净的方法是创建一个后处理器Beanshell脚本,作为在线程a中创建cookie的采样器的子级。要检索线程B中的值,请添加_属性函数作为需要cookie值的参数的值
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
Beanshell脚本如下所示:
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
props.put("COOKIENAME","COOKIEVALUE"); //creates a property "COOKIENAME" with value "COOKIEVALUE"
print(props.get("COOKIENAME")); //prints the value out to the console
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
上面的代码对于COOKIENAME总是具有相同的值,小于idea。因此,我们需要确保“COOKIEVALUE”是动态的。我建议使用后处理器正则表达式来提取cookie值,然后将其传递到beanshell脚本中
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
因此,我们的测试计划如下所示:
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
props.put("COOKIENAME","COOKIEVALUE"); //creates a property "COOKIENAME" with value "COOKIEVALUE"
print(props.get("COOKIENAME")); //prints the value out to the console
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
我们的beanshell脚本现在看起来像:
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
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
指向用户手册的链接:
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
您试图做的似乎是错误的,因为这意味着您要用相同的登录名/密码验证您的100个用户
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
但是,如果您仍然想这样做,您可以对一个用户使用setupThread,它通常对测试中的某些init任务有用,但并不意味着它满足了您的要求,这在我看来是错误的。在Jmeter 2.9中,您可以使用“一次性控制器”和“循环控制器”来实现这一点
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
太棒了
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
Frankie在新版本的JMeter中,您可以添加一个“设置线程组”,它完全满足您的需要
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
一种特殊类型的螺纹组,可用于执行测试前操作。这些线程的行为与普通线程组元素完全相同。区别在于,这些类型的线程在测试继续执行常规线程组之前执行
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
ThreadGroup:
HTTP request default
HTTP cookie manager
once only controller
login HTTP request
HTTP request for number of users
我想一次发送所有请求,如果我把“普通HTTP请求”放在循环控制器中,那么每个请求都会一个接一个地执行,这意味着在完成第一个请求后,它只会启动第二个请求。因此,我无法找到有多少请求将导致连接崩溃。我对一次性控制器还有一个疑问,我仍然无法理解一次性控制器的功能。在我的测试用例中,它正在为线程组中提到的所有线程运行。它应该只为测试用例运行一次,对吗?。请在此方面提供帮助。非常感谢您的回复,但我仍在为如何存储和获取财产价值而挣扎。你能告诉我在哪里存储属性值以及如何在另一个线程中获取它们吗。我想存储来自“线程A”的cookie管理器值,并在“线程B”中获取它。通过使用function helper,我通过选择function u属性得到一个字符串,但我不知道在哪里存储该字符串以使其成为全局字符串。function u属性自动将其存储为全局变量。启动_setProperty最干净的方法是创建一个后处理器Beanshell脚本,作为在线程a中授予cookie的采样器的子级。要检索线程B中的值,请添加_属性函数作为需要cookie值的参数的值。希望这有帮助(编辑原始回复以反映这一点)这是一个很好的答案。我想补充一点,您可以像这样从其他线程组检索属性值:${uuuu属性(COOKIENAME)}