暂时从JMeter HTTP请求中删除参数

时间:2016-12-01 17:29:04

标签: jmeter

我的场景是我在循环中发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能有变量,此时未设置,因此它们为null,因此我想从HTTP请求中删除该参数。我可以使用下面的代码成功完成。但是,在稍后的循环迭代中,此变量现在可以有一个值,我想包含我之前删除的参数。所以我的问题是,如何从HTTP请求中暂时删除参数?

我根据以下内容提供了JMeter测试计划摘录:

  • 当控制器
    • 一些逻辑
    • HTTP请求
      • JSR223 PreProcessor(groovy)

我的HTTP请求具有以下参数:

名称值

inputA $ {A}

inputB $ {B}

我的PreProcessor脚本如下所示:

  for (Iterator iterator = sampler.getArguments().iterator();
      prop = iterator.next();
      String value = prop.getStringValue();
      if (value.contains('\${')) {
          iterator.remove();
      }
   }

2 个答案:

答案 0 :(得分:1)

  1. 最快,最简单,最正确的解决方案是使用__evalVar() JMeter功能,如:

    JMeter EvalVar Function

    因此,如果未定义${A}变量,则inputA参数将以空值发送,并且行为良好的应用程序将忽略此类参数。请参阅How to Use JMeter Functions系列指南以开始使用JMeter函数

  2. 我记得回答类似here的问题,它假设使用Beanshell检查变量是否为空

  3. 如果出于某种原因,第1点和第2点不适用,请输入正确的代码以完全删除参数:

    import org.apache.jmeter.config.Arguments;
    
    Arguments args = sampler.getArguments();
    Iterator it = args.iterator();
    
    while (it.hasNext()) {
        def argument = it.next();
        if (argument.getStringValue().contains('${')) {
            args.removeArgument(argument.getName());
        }
    }
    

答案 1 :(得分:0)

此问题的解决方案可能是对采样器Arguments对象进行克隆并将其设置为采样器。

    import org.apache.jmeter.config.Arguments;
    Arguments arguments = sampler.getArguments().clone();
    sampler.setArguments(arguments);
    for (Iterator iterator = sampler.getArguments().iterator();
        prop = iterator.next();
        String value = prop.getStringValue();
        if (value.contains('\${')) {
            iterator.remove();
        }
    }