是否可以在Jmeter中对线程故障执行某些操作?
假设我有一个Jmeter测试,它模拟一些用户登录和其他一些操作。我还启用了“错误时启动新线程”。因此,如果某个用户失败,它只会得到另一个用户,并在指定的时间内继续处理测试 但我会定期调用授权用户,为了模拟它们,我需要使用“线程间通信”和额外的线程组(-s)。基本上,这可以按照以下方式工作——在主线程中,我登录并用所需的cookie填充一些FIFO队列,然后在另一个线程组中获得该cookie。在另一个线程组中,我还检查了一个FIFO队列(在用户注销时填充),如果得到所需的内容,则停止该线程 这里的问题是当主线程在登录后失败时。在这种情况下,子线程将“永远”执行,因为周期性调用使会话保持活动状态 问题是——Jmeter中是否有可能在线程失败时执行某些操作(类似smth的finally块)。基本上,我需要在注销或线程失败时填充第二个FIFO队列,并在所有请求执行时添加一个相同级别的FIFO。它将应用于每个请求,如果失败,您将能够执行您需要的操作 比如:是否可以在Jmeter中对线程故障执行某些操作?,jmeter,try-catch-finally,Jmeter,Try Catch Finally,假设我有一个Jmeter测试,它模拟一些用户登录和其他一些操作。我还启用了“错误时启动新线程”。因此,如果某个用户失败,它只会得到另一个用户,并在指定的时间内继续处理测试 但我会定期调用授权用户,为了模拟它们,我需要使用“线程间通信”和额外的线程组(-s)。基本上,这可以按照以下方式工作——在主线程中,我登录并用所需的cookie填充一些FIFO队列,然后在另一个线程组中获得该cookie。在另一个线程组中,我还检查了一个FIFO队列(在用户注销时填充),如果得到所需的内容,则停止该线程 这里的
- 螺纹组
- 登录采样器
- 其他采样器
- 其他一些采样器
- 比恩希尔断言
if (!SampleResult.isSuccessful()){
log.info("Test " + SampleResult.getSampleLabel() + " has failed");
// handle the error
}
有关详细信息,请参阅指南 我还必须在示例错误上注销,这需要类似于try-catch-finally的东西。带有条件
${JMeterThread.last_sample_ok}
的IF控制器
,并选中评估所有子项?
如下,以干净的方式满足了我的需要:
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)
您不能使用带有javascript的IF控制器来处理登录失败后所需的代码处理。否。因为我不知道发生错误的确切地点。问题是我在登录后有很多请求,每个请求都可能失败。谢谢,但这不起作用。我不确定这是一个特性还是一个问题,但是beanshell中使用的Jmeter函数总是被执行的,即使它们在不可访问的{}块中,即使它们被注释。所以有下面的BS断言:
if(Failure){/${{uu-fifoPut(JSESSIONID,true)};}print(${uu-fifoGet(JSESSIONID,true)})
我将为所有样本打印“true”(不管它们是否失败)。Failure
是指示断言是否失败的属性,它默认为false
。如果您想检查父采样器是否失败,您应该使用SampleResult.issusccessful()
而不是我在上面的回答中提到的那样,无论失败还是SampleResult.issusccessful(),结果都是相同的-始终执行函数