Jmeter中可能对线程故障执行某些操作吗?
比方说,我有一个模拟一些用户登录和几个更多操作的Jmeter测试。我也有'开始新的线程出现错误'打开。因此,如果某些用户失败 - 它只会让另一个用户继续处理测试指定的时间。Jmeter中可能对线程故障执行某些操作吗?
但我有一些定期调用授权用户和模拟他们,我需要使用“线程间通信”和附加线程组(-s)。基本上,这在以下方式中工作正常 - 在主线程中,我登录并填充一些具有所需cookie的FIFO队列,并在另一个线程组中获取该cookie。在另一个线程组中,我还检查了另外一个FIFO队列(在用户注销时填充),如果得到我需要的,停止该线程。
这里的问题是主线程在登录后失败。在这种情况下,子线程将被永久执行,因为该定期调用会保持会话活动。
而这个问题 - 是否有一些可能性让Jmeter在线程失败时执行一些操作(像finally块一样运行)。基本上我需要在注销或线程故障时填写第二个FIFO队列
在与所有请求相同的级别添加Beanshell Assertion。它将适用于每个请求,如果发生故障,您将能够满足您的需求。
喜欢的东西:
- 线程组
- 登录样
- 其他一些采样
- 一些其他采样
- 的BeanShell断言
示例断言的代码:
if (!SampleResult.isSuccessful()){
log.info("Test " + SampleResult.getSampleLabel() + " has failed");
// handle the error
}
参见How to Use JMeter Assertions in 3 Easy Steps指南的详细信息,JMeter Assertions。
谢谢,但这不起作用。我不确定这是一个功能还是问题,但在beanshell中使用的Jmeter函数总是执行,即使它们不可访问{}块,即使它们已被注释。 所以有下面的BS断言: 'if(Failure){$ {__ fifoPut(JSESSIONID,true)}; } print(“$ {__ fifoGet(JSESSIONID,)}”); ' 我会为所有样本打印'true'(如果它们没有失败,则无关紧要)。 – 2014-09-16 07:39:24
'Failure'是指示断言是否失败的属性,它默认为'false'。如果你想检查父采样器是否失败,你应该使用'SampleResult.isSuccessful()'而不是像我在上面的回答中提到的那样 – 2014-09-16 08:16:52
Failure或者SampleResult.isSuccessful()无关紧要,结果是相同的 - 函数总是执行 – 2014-09-16 08:47:55
我还必须注销样本错误,它需要try-catch-finally之类的东西。与条件${JMeterThread.last_sample_ok}
的IF Controller
和下方勾选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)
不能使用IF控制器用JavaScript处理您所需的代码登录失败后的处理加工。 – 2014-09-12 13:19:57
没有。因为我不知道可能发生错误的确切位置。问题是登录后我有很多请求,并且每个都可能失败。 – 2014-09-12 14:01:49