使用BSF预处理器发送JSON POST请求

时间:2011-09-20 11:50:58

标签: javascript performance jmeter

我正在与JMeter合作编写一些性能测试。我需要做的一件事是动态构造一个巨大的json请求并将其作为POST请求paylod发送。使用BSF预处理器,我能够动态修改有效负载,但我的javascript字符串正在编码,而我想发送它而不进行编码。

我不确定BSF预处理器如何阻止它被编码。我当前用来更改POST请求有效负载的命令如下:

var jsonData = '[{"item":"value","something":"everything"}]';
sampler.addArgument("",jsonData);

如果您能指出一些清楚解释如何使用bsf预处理器的示例,我将非常感激。

任何跳过编码的指针也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

从JMeter 2.6开始,您可以使用帖子正文标签来使用RAW请求窗格。

因此,您的解决方案是执行以下操作:

  1. 在BSF Sampler中,将JSON放在变量中:

    var jsonData = '[{"item":"value","something":"everything"}]';
    vars.putObject("jsonData",jsonData);
    
  2. 在Post Body中,放:

    ${jsonData}
    
  3. 使用您的方法的另一个选择是使用Beanshell语言(而不是javascript)放入BSFPreProcessor:

    import org.apache.jmeter.protocol.http.util.HTTPArgument;
    String jsonData = "[{\"item\":\"value\",\"something\":\"everything\"}]";
    HTTPArgument arg =new HTTPArgument("", jsonData, null, true);
    arg.setAlwaysEncoded(false);
    sampler.getArguments().addArgument(arg);
    

    此致

    Philippe M。

答案 1 :(得分:-1)

将您的采样器“HTTPArgument.always_encode”上的属性设置为false,这应禁用参数编码