假设我有一个Jmeter测试模拟一些用户登录和几个动作。我也打开了“启动错误的新线程”。因此,如果某些用户失败 - 它将只获得另一个用户并继续处理测试指定的时间。
但我有一些定期调用授权用户并模拟它们我需要使用“线程间通信”和其他线程组(-s)。基本上这可以通过以下方式正常工作 - 在主线程中我登录并使用所需的cookie填充一些FIFO队列,并在另一个线程组中获取该cookie。在另一个线程组中,我还检查了另一个FIFO队列(在用户注销时填写),如果得到我需要的话,就停止该线程。
这里的问题是登录后主线程失败的时候。在这种情况下,子线程将“永远”执行,因为该定期调用会使会话保持活动状态。
问题是 - Jmeter是否有可能在线程失败时执行某些操作(像最后阻塞一样)。基本上我需要在注销或线程故障时填充第二个FIFO队列
答案 0 :(得分:1)
在与您的所有请求相同的级别添加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)