【问题标题】:Is it possible execute some action on thread failure in Jmeter?是否可以对 Jmeter 中的线程故障执行一些操作?
【发布时间】:2014-09-12 13:02:08
【问题描述】:

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

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

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

还有一个问题——Jmeter 中是否有可能对线程故障执行一些操作(比如 finally 块)。基本上我需要在注销或线程失败时填充第二个 FIFO 队列

【问题讨论】:

  • 你不能使用 IF 控制器和 javascript 在登录失败后处理你需要的代码处理。
  • 没有。因为我不知道可能发生错误的确切位置。问题是我登录后有很多请求,每个请求都可能失败。

标签: jmeter try-catch-finally


【解决方案1】:

在您的所有请求所在的同一级别添加Beanshell Assertion。它将适用于每个请求,如果失败,您将能够做您需要的事情。

类似:

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

示例断言代码:

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

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

【讨论】:

  • 谢谢,但这不起作用。我不确定这是一个特性还是一个问题,但是 beanshell 中使用的 Jmeter 函数总是被执行,即使它们在不可访问的 {} 块中,即使它们被注释。因此,有以下 BS 断言:if (Failure){ //${__fifoPut(JSESSIONID,true)}; } print("${__fifoGet(JSESSIONID,)}"); 我将为所有样本打印“真实”(不管它们是否失败)。
  • Failure 是表示断言是否失败的属性,默认为false。如果您想检查父采样器是否失败,您应该使用SampleResult.isSuccessful(),正如我在上面的回答中提到的那样
  • 不管是Failure还是SampleResult.isSuccessful(),结果都一样——函数总是被执行
【解决方案2】:

我还必须退出示例错误,这需要 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)

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多