Java jMeter线程序列
我有一个带有以下http请求采样器的JMeter测试计划Java jMeter线程序列,java,multithreading,performance,jmeter,Java,Multithreading,Performance,Jmeter,我有一个带有以下http请求采样器的JMeter测试计划 登录 调用一些需要登录用户的功能 注销 当我使用5个并行线程执行测试计划时,我看到在为一些线程调用采样器1之前调用了采样器2,这会使响应断言失败 有没有办法指定要执行的采样器序列?这应确保它们按顺序执行: 让我们从线程组开始 线程数(用户数)为5 因此,假设您已经为您的登录采样器制定了逻辑。只需添加额外的采样器。因此,右键单击该示例Add>Post Processors>BSF PostProcessor,在这个Post-process
有没有办法指定要执行的采样器序列?这应确保它们按顺序执行: 让我们从线程组开始 线程数(用户数)为5 因此,假设您已经为您的登录采样器制定了逻辑。只需添加额外的采样器。因此,右键单击该示例
Add>Post Processors>BSF PostProcessor
,在这个Post-processor大脚本空间中写入${uuuuu setProperty(ThreadValue,${uuuu threadNum},)}
这将把线程号保存到名为ThreadValue
的属性中。确保在下拉列表中选择您的语言为beanshell
然后在登录采样器之后添加if控制器。将其添加到条件字段(${JMeterThread.last_sample_ok}==true)和&(${u__属性(ThreadValue,,)}=${u threadNum})
这意味着->只在实际登录成功时登录,并且如果登录线程与您当前所在的线程匹配,则只执行登录操作
就是这样,您只在if控制器内进行登录操作。如果您想确保您注销了正确的用户,请在其周围放置额外的If控制器
欢呼[/P>>P>你需要考虑的是,每个线程都是一个独立的实体,就像一个真实的用户,并且它拥有自己的会话,但是JME被设计成异步地执行这些线程,即并行。View Results Tree listener(查看结果树侦听器)显示所有线程的所有活动,不管逻辑线程顺序如何。如果您希望让1个线程进行5次迭代,那么只需将线程计数更改为1,并使用5的循环,这将保留序列(尽管这不符合使用JMeter之类的负载测试工具的意义!)
如果将线程数更改为1,则可以在结果树中看到真实的逻辑执行序列。这将显示每个采样器按顺序自上而下执行现在,在您的情况下,我怀疑您有问题,不是因为事情没有按顺序运行,而是因为服务器正在丢失请求之间的会话上下文。这是很常见的,通常您可以使用或使用解决问题。您为什么认为取样器2在取样器1之前执行?请求是按顺序执行的,自上而下,这不太可能失败,因此可能是您如何解释结果的问题。因为我在查看结果树中看到,当我从5个并行线程开始时,登录被调用4次,而另一个页面未通过应该有注销按钮的断言。“查看结果树”不反映每个线程的序列,它不是一个可靠的源(因为某些线程的执行速度可能比其他线程快)。但我的问题仍然是,对于视图结果树未显示正确顺序的测试,断言完全失败。@rangalo您应该阅读我答案的第三段。您可能在上下文方面有问题。我可以根据此处的响应代码验证登录是否成功吗?