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

暂时从JMeter HTTP请求中删除参数,jmeter,Jmeter,我的场景是在循环中发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能有一些变量没有在这里设置,所以它们是空的,因此我想从HTTP请求中删除这个参数。我可以用下面的代码成功地做到这一点。但是,在以后的循环迭代中,这个变量现在可以有一个值,我想包括我之前删除的参数。所以我的问题是,如何从HTTP请求中临时删除参数 我有一份JMeter测试计划摘录,根据: While控制器 一些逻辑 HTTP请求 JSR223预处理器(groovy) 我的HTTP请求具有以下参数

我的场景是在循环中发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能有一些变量没有在这里设置,所以它们是空的,因此我想从HTTP请求中删除这个参数。我可以用下面的代码成功地做到这一点。但是,在以后的循环迭代中,这个变量现在可以有一个值,我想包括我之前删除的参数。所以我的问题是,如何从HTTP请求中临时删除参数

我有一份JMeter测试计划摘录,根据:

  • While控制器
    • 一些逻辑
    • HTTP请求
      • JSR223预处理器(groovy)
我的HTTP请求具有以下参数:

名称值

输入${A}

inputB${B}

我的预处理器脚本如下所示:

  for (Iterator iterator = sampler.getArguments().iterator();
      prop = iterator.next();
      String value = prop.getStringValue();
      if (value.contains('\${')) {
          iterator.remove();
      }
   }
  • 最快、最简单且正确的解决方案是使用JMeter函数,如:

    因此,如果未定义
    ${A}
    变量-
    inputA
    参数将发送一个空值,这些参数将被行为良好的应用程序忽略。请参阅一系列指南以开始使用JMeter函数

  • 我记得回答过类似的问题,它假设使用

  • 如果由于某些原因第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());
        }
    }
    

  • 此问题的解决方案可能是克隆sampler Arguments对象并将其设置为sampler

        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();
            }
        }
    

    不幸的是,对于(1),应用程序实际上并不忽略空白值。至于(2)和(3),问题仍然是,一旦我删除了参数,我就不能在以后的循环中使用它。假设我将在循环上迭代2次。第一次vars.get(“A”)=null时,我将删除该参数。第二次vars.get(“A”)=foo,现在我无法应用此值。至于(3),使用这段代码,我将运行java.util.ConcurrentModificationException。在修改参数之前,也许我可以将它们保存在bsh.shared中,然后在后处理器中重新设置。下一步我会尝试。然后转到另一种方法:在没有任何参数的情况下生成空白请求,如果相关的变量值存在,则有条件地添加参数。我错过什么了吗?实际上,我正在使用CSV中的参数运行api测试,我的目标是在参数的值为空字符串时为参数提供空字符串,并在提供类似“nullValue”的字符串时删除参数。JSON主体{“ID”:“nullValue”}脚本:for(迭代器迭代器=sampler.getArguments().Iterator();prop=Iterator.next();String value=prop.getStringValue();if(value.contains('nullValue')){Iterator.remove();}