我有一个TestPlan
Thread-group
HttpSampler
pre-processor
HttpHeaderManager[empty]
HttpRequestDefaults[empty]
Post-processor
我正在使用预处理器脚本通过读取json文件动态地向headerManager添加标头。它进展顺利。
import org.apache.jmeter.protocol.http.control.Header
int min = args[0].toInteger()
int max = args[1].toInteger()
int random = min + (int) (Math.random() * ((max - min) + 1));
// here 'inputjson' referring to slurped json object
inputjson.Headers.each{
it.each{ key,value -> sampler.getHeaderManager().add(new Header(key.replace('$random',random.toString()),value.replace('$random',(random+2).toString())));
}
}
问题是,如果线程循环计数为3,那么标头集合将增加3次。
然后我添加了一个后处理器脚本
sampler.getHeaderManager().clear()
这次初始[loop-1]运行正常,下一个[loop-2]循环是一个没有标题的清除请求。我怎样才能实现,每个请求只能使用一组标题
答案 0 :(得分:0)
不要使用f $%$ ing方法HeaderManager.clear()
,我仍然无法获得,并且不会在后处理器中执行此操作,最好先在预处理器中执行此操作将标题添加到标题管理器。
headerMgr = sampler.getHeaderManager();
while(headerMgr.getHeaders().iterator().hasNext()) {
headerName = headerMgr.getHeaders().iterator().next().getStringValue().split("\\s+")[0];
headerMgr.removeHeaderNamed(headerName);
}
答案 1 :(得分:0)
这是我的工作示例-HeaderManager.clear()
无效,但是通过删除标题的标题可以完成工作。
import org.apache.jmeter.protocol.http.control.Header;
sampler.getHeaderManager().removeHeaderNamed("Authorization");
sampler.getHeaderManager().add(new Header("Authorization", "Bearer " + vars.get("token")));
答案 2 :(得分:0)
您可以使用以下代码以编程方式删除标题 - 首先,获取标题计数并循环直到标题计数结束。
int headers_size = sampler.getHeaderManager().size();
log.info("headers_size: "+ headers_size);
while(headers_size > 0) {
log.info("header to be removed:"+ sampler.getHeaderManager().get(0));
sampler.getHeaderManager().remove(0);
headers_size = sampler.getHeaderManager().size();
}
答案 3 :(得分:-1)
这将由
完成在headerManger添加部分之前添加prog.cpp:5:25: error: size of variable 'arr' is too large
std::array<int, -1> arr;
。
每次添加新的HeaderManger并将被使用。不确定它是最好的解决方案,但它是一个可行的解决方案。