如何以编程方式清除标题管理器

时间:2016-05-17 18:49:41

标签: jmeter

我有一个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]循环是一个没有标题的清除请求。我怎样才能实现,每个请求只能使用一组标题

4 个答案:

答案 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并将被使用。不确定它是最好的解决方案,但它是一个可行的解决方案。