【问题标题】:Jmeter generate json payload of request dynamicallyJmeter动态生成请求的json负载
【发布时间】:2014-12-05 11:30:50
【问题描述】:

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

请求正文应包含如下Json:

{
  "productIds" : [
    "p1",
    "p2",
    ...
  ]
}

我设置了一个随机变量生成器,每次调用都会返回格式良好的 productId。我想做的是通过填充从生成器中获取的随机 pid 的 productIds 来生成有效负载,直接在请求的正文中。类似的东西(假设 *** 是脚本转义):

{
  "productIds" : [
     ***
       for i in (1, $productsCount) {
         write("\"$randomPid\"\n")
       }
     ***
  ]
}

有可能吗?如果是,如何?如果不是,您将如何处理这个问题?

谢谢!

【问题讨论】:

    标签: json scripting jmeter


    【解决方案1】:
    1. 添加 Beanshell PreProcessor 作为您要参数化的请求的子项
    2. 将以下代码放入预处理器的“脚本”区域:

      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());
      
    3. 将您的 ${productsCount} 值放入“Parameters”节中
    4. 在需要时将生成的有效负载称为${json}

    有关 Apache JMeter 中的 Beanshell 脚本的更多详细信息,请参阅 How to use BeanShell: JMeter's favorite built-in component guide

    【讨论】:

    • 是的,在看到您的答案之前我就是这样做的,想知道是否可以直接在 http 请求有效负载中进行操作,但这也可以。谢谢!
    • 您可以在请求正文中直接使用__Beanshell 函数,但从编码角度来看,整个方法是相同的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多