2016-12-01 61 views
2

我的方案是我在循环内发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能会有变量在这一点上没有设置,所以他们是空的,因此我想从HTTP请求中删除参数。我可以用下面的代码成功地做到这一点。然而,在稍后的循环迭代中,这个变量现在可以有一个值,我想包括我之前删除的参数。所以我的问题是,我如何暂时从我的HTTP请求中删除参数?暂时从JMeter HTTP请求中移除参数

我具有根据JMeter的测试计划提取物:

  • 虽然控制器
    • 一些逻辑
    • HTTP请求
      • JSR223预处理器(常规)

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

名称值

inputA $ {A}

inputB $ {B}

我的预处理器脚本的样子:

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

我正在尝试使用一个简单的邮政调用您的解决方案,它并没有为我工作。我错过了什么吗?我实际上使用CSV参数运行api测试,我的目标是当它的值为空字符串和删除参数时提供空字符串参数,当我提供一个字符串像'nullValue'。 的JSON体 { “ID”: “NullValue属性” } 脚本: 为(迭代迭代= sampler.getArguments()迭代(); 丙= iterator.next(); 字符串值=道具。如果(value.contains('nullValue')){ iterator.remove(); } } – Razkar

回答

0

解决这个问题可能是使采样变元的克隆ts对象并将其设置为采样器。

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(); 
     } 
    } 
0
  1. 最快,最简单,恕我直言,正确的解决办法是使用__evalVar() JMeter的功能,如:

    JMeter EvalVar Function

    所以在情况下,如果${A}变量没有定义 - inputA参数将用空值来发送和这些参数被性能良好的应用程序忽略。参见系列的How to Use JMeter Functions导游开始使用JMeter的功能

  2. 我记得在回答类似here的东西,它承担检查,如果该变量为null使用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()); 
        } 
    } 
    
+0

不幸的是,对于(1),应用程序实际上不会忽略空白值。 )和(3),问题依然存在,一旦我删除了参数,我不能在循环的后面使用它,假设我将遍历循环2次第一次vars.get(“A”)= null,I将删除参数。第二次vars.get(“A”)= foo,现在我c不适用这个值。 至于(3),使用这段代码,我会遇到java.util.ConcurrentModificationException。 也许我可以在修改它们之前将参数保存在bsh.shared中,然后将它们放回到后处理器中。我会接下来尝试。 – SBGX

+0

然后转到另一种方式:先创建没有参数的空请求,并在存在相关变量值的情况下有条件地添加参数。 –