Jmeter动态生成请求的json负载

Jmeter动态生成请求的json负载,json,scripting,jmeter,Json,Scripting,Jmeter,我有一个Jmeter测试计划,希望我的HttpSampler发送post请求 请求正文应包含Json,如下所示: { "productIds" : [ "p1", "p2", ... ] } 我已经设置了一个随机变量生成器,它在每次调用时返回格式良好的productId。我想做的是通过在请求体中直接填充从生成器获取的随机pid的ProductID来生成有效负载。类似(假设***是脚本转义): 可能吗?如果是,如何进行?如果没有,你将如何处理这个问题 谢谢 将添加

我有一个Jmeter测试计划,希望我的HttpSampler发送post请求

请求正文应包含Json,如下所示:

{
  "productIds" : [
    "p1",
    "p2",
    ...
  ]
}
我已经设置了一个随机变量生成器,它在每次调用时返回格式良好的productId。我想做的是通过在请求体中直接填充从生成器获取的随机pid的ProductID来生成有效负载。类似(假设***是脚本转义):

可能吗?如果是,如何进行?如果没有,你将如何处理这个问题

谢谢

  • 将添加为要参数化的请求的子级
  • 将以下代码放入预处理器的“脚本”区域:

    StringBuilder结果=新建StringBuilder();
    字符串newline=System.getProperty(“line.separator”);
    int max=Integer.parseInt(参数);
    随机=新随机();
    结果。追加(“{”);
    结果。追加(“\”productIds\“:[”);
    结果.追加(换行符);
    对于(int i=1;i
  • 将${productsCount}值放入“参数”小节
  • 如果需要,请将生成的有效负载引用为
    ${json}

  • 有关ApacheJMeter中Beanshell脚本的更多详细信息,请参阅

    是的,在看到您的答案之前,我就是这样做的,我想知道是否可以直接在http请求负载中执行,但这也没关系。谢谢您可以在请求主体中使用函数,但从编码角度来看,整个方法都是相同的
    {
      "productIds" : [
         ***
           for i in (1, $productsCount) {
             write("\"$randomPid\"\n")
           }
         ***
      ]
    }
    
    StringBuilder result = new StringBuilder();
    String newline = System.getProperty("line.separator");
    int max = Integer.parseInt(Parameters);
    Random random = new Random();
    
    result.append("{");
    result.append("\"productIds\" : [");
    result.append(newline);
    for (int i = 1; i < max; i++) {
        result.append("\"").append(random.nextInt()).append("\",");
        result.append(newline);
    }
    result.append("]");
    result.append(newline);
    result.append("}");
    
    vars.put("json", result.toString());