我有一个相对简单的JMeter测试计划设置,如下所示: https://imgur.com/c8BIzBB
相关部分是BeanShell预处理器(显示为安装元素数据)及其与HTTP请求采样器的关系(显示为 POST / elements )。这两个都在一个循环控制器内(显示为做几次)。
预处理器获取存储在bsh.shared
对象上的数据数组,并随机选择一个项目。然后它设置一个名为elementTypeId
的变量。
当我运行此测试时,elementTypeId
会被正确记录(因此我假设已设置)。但是,第一次,变量未正确设置并仍显示为${elementTypeId}
。其他样本似乎已设置,但使用的是第n-1值。
第一个失败的样本显示在此处:https://imgur.com/Gj2YAje
最终样本(和记录的值)显示在此处:https://imgur.com/OW5HSsS
设置元素数据 - BeanShell预处理器代码:
import java.util.Random;
import com.eclipsesource.json.*;
Random rand = new Random();
int idx = rand.nextInt(bsh.shared.elementTypes.size());
JsonValue elementType = bsh.shared.elementTypes.get(idx);
String elementTypeId = String.valueOf(elementType.get("id").asInt());
log.info(elementTypeId);
vars.put("elementTypeId", elementTypeId);
在我看来,在预处理程序设置变量之前,采样器正在触发 - 这似乎与应该发生的事情相反。
当我禁用SetQueryParams PreProcessor时,似乎变量设置正确(尽管请求失败,因为它需要添加查询参数)。
SetQueryParams PreProcessor:
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
if (sampler instanceof HTTPSamplerBase &&
sampler.getMethod().equalsIgnoreCase("post")) {
// add query parameter to url
var customPath = sampler.getPath() + '?' + sampler.getQueryString();
sampler.setPath(customPath);
// remove query parameter from body
arguments = sampler.getArguments();
while (arguments.getArgumentCount() > 1) {
arguments.removeArgument(arguments.getArgumentCount() - 1);
}
sampler.setArguments(arguments);
}
是否可以将两个预处理器应用于POST请求?
答案 0 :(得分:0)
答案 1 :(得分:0)
在控制台中检查是否引发了异常。 尝试解决这个问题
如果没有任何效果,请复制您的脚本,删除Beanshell预处理程序,然后再次添加BeanShell并粘贴您的脚本。 这可能很愚蠢,但对我有用。