Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jMeter线程序列_Java_Multithreading_Performance_Jmeter - Fatal编程技术网

Java jMeter线程序列

Java jMeter线程序列,java,multithreading,performance,jmeter,Java,Multithreading,Performance,Jmeter,我有一个带有以下http请求采样器的JMeter测试计划 登录 调用一些需要登录用户的功能 注销 当我使用5个并行线程执行测试计划时,我看到在为一些线程调用采样器1之前调用了采样器2,这会使响应断言失败 有没有办法指定要执行的采样器序列?这应确保它们按顺序执行: 让我们从线程组开始 线程数(用户数)为5 因此,假设您已经为您的登录采样器制定了逻辑。只需添加额外的采样器。因此,右键单击该示例Add>Post Processors>BSF PostProcessor,在这个Post-process

我有一个带有以下http请求采样器的JMeter测试计划

  • 登录
  • 调用一些需要登录用户的功能
  • 注销
  • 当我使用5个并行线程执行测试计划时,我看到在为一些线程调用采样器1之前调用了采样器2,这会使响应断言失败


    有没有办法指定要执行的采样器序列?

    这应确保它们按顺序执行:

    让我们从线程组开始

    线程数(用户数)为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您应该阅读我答案的第三段。您可能在上下文方面有问题。我可以根据此处的响应代码验证登录是否成功吗?