使用目标所有线程测试操作

时间:2017-10-30 09:10:11

标签: multithreading jmeter

使用“立即停止/停止”操作添加Test Action

您有目标选项:所有主题/当前主题

在多线程环境中选择当前线程时,它会停止并且不再继续使用此采样器

问题在于选择所有主题时有些线程会在Test Action之后执行其他采样器

这非常令人困惑,因为我希望All Threads选项比Current Thread更严格

在代码中我看到它在当前线程中也会停止当前线程context.getThread().stop();,并且在“所有线程”选项中它不会。

是错误还是功能(添加停止的宽限期)?

例如测试计划:

  • 线程组(5个主题)
    • Sampler1
    • 测试操作目标:所有线程,操作停止/立即停止
    • Sampler2

采样器2仅在Target:All Threads时执行,而不在Target:Current Thread

时执行

注意:同样选择Action Go to next loop iteration(禁用目标字段)会阻止Sampler2执行

1 个答案:

答案 0 :(得分:2)

现在停止和停止是不同的:

  • 停止是一个干净的关闭,这意味着当前运行的样本将完成。因此,即使在测试操作之后您也可以看到其他采样器
  • Stop Now是一个硬关机,意味着当前正在运行的样本将再次被中断,如果您在测试操作后看到其他采样器就可以了

当前线程只会停止当前线程而不是所有线程,所以可以:

  

在多线程环境中选择“当前线程”时,它会停止并且不再继续此“采样器”

所有线程将在我们拥有的代码中对所有测试线程执行操作:

 if (action == STOP_NOW) {
     log.info("Stopping all threads now from element {}", getName());
     context.getEngine().stopTest();
 } else {
     log.info("Stopping all threads from element {}", getName());
     context.getEngine().askThreadsToStop();
 }

关于您的具体情况,以下是正在发生的事情:

  • 当您选择“当前线程”时,JMeter会立即停止当前线程,因为此操作在测试操作

  • 之后生效
  • 当您选择“所有线程”时,JMeter异步触发对所有线程关闭/停止的调用,这就是调用Sampler2的原因

您可能认为这是一个错误,但我认为用例是不同的。 现在还在修复: