是否可以在Jmeter中对线程故障执行某些操作?

时间:2014-09-12 13:02:09

标签: jmeter try-catch-finally

假设我有一个Jmeter测试模拟一些用户登录和几个动作。我也打开了“启动错误的新线程”。因此,如果某些用户失败 - 它将只获得另一个用户并继续处理测试指定的时间。

但我有一些定期调用授权用户并模拟它们我需要使用“线程间通信”和其他线程组(-s)。基本上这可以通过以下方式正常工作 - 在主线程中我登录并使用所需的cookie填充一些FIFO队列,并在另一个线程组中获取该cookie。在另一个线程组中,我还检查了另一个FIFO队列(在用户注销时填写),如果得到我需要的话,就停止该线程。

这里的问题是登录后主线程失败的时候。在这种情况下,子线程将“永远”执行,因为该定期调用会使会话保持活动状态。

问题是 - Jmeter是否有可能在线程失败时执行某些操作(像最后阻塞一样)。基本上我需要在注销或线程故障时填充第二个FIFO队列

2 个答案:

答案 0 :(得分:1)

在与您的所有请求相同的级别添加Beanshell Assertion。它适用于每个请求,如果失败,您将能够满足您的需求。

类似的东西:

  • 线程组
    • 登录采样器
    • 其他一些采样器
    • 其他一些采样器
    • Beanshell Assertion

示例断言代码:

if (!SampleResult.isSuccessful()){
    log.info("Test " + SampleResult.getSampleLabel() + " has failed");
    // handle the error
}

有关How to Use JMeter Assertions in 3 Easy Steps的更多信息,请参阅JMeter Assertions指南。

答案 1 :(得分:0)

我还必须注销样本错误,需要像try-catch-finally这样的东西。 IF Controller条件为${JMeterThread.last_sample_ok}且已检查Evaluate for all children?如下所示,以干净的方式满足了我的需求:

TestPlan
    HTTP Cookie Manager
    HTTP Request Defaults
    ThreadGroup - (continue on error)
            HTTP Request - login
       IfController - (Evaluate ${JMeterThread.last_sample_ok} for all children)
                  HTTP Request 1
                  HTTP Request 2
                  ....
                  HTTP Request n
            HTTP Request - logout (after and outside of IF)
相关问题