2017-04-18 23 views
0

我必须实现一个场景,如果它失败并根据响应我正在写一些信息,我必须在最多5次调用相同的请求文件中的东西。 当我从cookie中找不到一个字符串时,会发生失败,并将其作为常规exp捕获。Jmeter:如果在响应中找不到特定的字符串,请重新调用HTTP采样器请求Cookie

要解决这个问题,我已经添加while循环与计数器,但脚本工作,直到50000迭代,然后给出内存不足的错误。 如果我不把while循环重新调用5次相同的请求,那么相同的脚本可以在没有任何问题的情况下为同一个JVM运行100万次。

看起来像Jmeter中的控制器不知何故消耗更多的内存和内存不足。

是否有任何选项通过Beanshell Post Processor调用相同的HTTP请求?

回答

0
  1. 使用While ControllerCounter相结合的办法:

    • 虽然控制器:条件${__javaScript(${counter} < 5 && "${foo}" != "bar",)}
      • 计数器:启动1,增量1,参考名称counter
      • 你的采样

    假设上述设置Your Sampler将被执行或者5倍,或当不${foo}变量值等于bar,不管来自第直到。有关全面的解释和更多示例,请参见Using the While Controller in JMeter

  2. 如果你还在寻找你可以使用类似BeanShell的方式:

    if (!prev.getResponseDataAsString().contains("foo")) { 
        ctx.getCurrentSampler().sample(null); 
    } 
    

    上面的代码被放入Beanshell PostProcessor将执行父采样一次,如果有也不会在响应foo子,但是这样你将无法在侦听器中看到执行结果,并且它不会被存储到.jtl文件中,基本上只有一个执行。

+0

感谢您的快速回答。事实上,我已经添加了第一个解决方案,并从csv文件读取50000条记录后,内存不足。如果我不把这个条件的while循环,它从csv读取所有100万条记录,并完成交易没有任何错误,但在这种情况下,我不会在失败的情况下重试5次。所以我想检查任何替代解决方案来做同样没有While循环。 –

+0

我对方法2有疑问,如果我在beashell postProcessor中添加它,它是否会捕获正则表达式,并且它会再次发送到失败的取样器的后处理器?有没有办法在这里放置一个逻辑计数器? –

相关问题