我正在JMeter中设计负载测试。 使用我们每当发送HTTP请求时都有的当前应用程序,Web服务器将偶尔发回一个带有消息的页面。要解决此问题,我们只需重新加载页面即可。这个页面可以提供任何HTTP请求。
有没有办法在JMeter中设计测试,当采样器发生故障时,采样器只需重试?
我不确定如何让Beanshell采样器重新发送HTTP请求。
答案 0 :(得分:3)
可以通过额外的Beanshell Assertion
来实现您可以从Beanshell Assertion重新运行任意采样器,就像
一样简单ctx.getCurrentSampler().sample(null);
在所有其他断言之后添加Beanshell断言。这很重要,因为断言正在颠倒执行。
将以下代码放入Beanshell Assertion" Script"区域(只需将"message"
更改为服务器在出错时返回的内容。
import org.apache.jmeter.samplers.SampleResult;
if (new String(ResponseData).equals("message")) {
SampleResult result = ctx.getCurrentSampler().sample(null);
if (result.getResponseDataAsString().equals("message")) {
Failure = true;
} else {
SampleResult.setSuccessful(true);
}
}
您只记录了一个结果。
有关Beanshell脚本编制的详细信息,请查看How to use BeanShell: JMeter's favorite built-in component指南。
答案 1 :(得分:1)
创建这样的层次结构:
Thread Group (1 user, 1 second ramp-up, forever)
-While Controller (empty condition = forever)
--Counter (start – 1, increment – 1, reference name – counter)
--HTTP request
---Timer (I prefer constant Timer, responseble for pause betwee retrying)
---BeanShell Post Processor
BeanShell后处理器应该包含(伪代码):
if(Integer.parseInt(vars.get("counter")>5)
{
prev.setSuccessful(false);
prev.setStopTestNow(true);
}
if(successCondition)
{
prev.setStopTest(true);
}
答案 2 :(得分:-1)
没有直接的方法来实现它,但我认为您可以使用While控制器与Regex提取器一起重新发送失败的请求。
逻辑流程可以是,
1. HTTP request
2. Regex extractor post processor - check response contains failure extract value in msg variable, default is success
3. While controller - run till msg=failure, default value of msg is success
示例屏幕截图,
让我知道这是否有效。