【问题标题】:How to simulate multiple child elements with different values in the same Jmeter POST request body?如何在同一个 Jmeter POST 请求正文中模拟具有不同值的多个子元素?
【发布时间】:2018-01-24 23:46:48
【问题描述】:

以下请求是基本请求,

    [
    {
     "name": "Test1",
     "description": "testings",
    "unitname": simple,
    "ID": 02,
      "val": "item"
      },
     {
    "name": "Test2",
   "description": "testing",
    "unitname": simple3,
    "ID": 23,
    "val": "item"
    }
  ]

我想在单个 JMeter 请求中使用多个 (1000) 'child' 部分来模拟它,如下所示: 它应该创建 1000 个具有唯一值的数据集(名称、描述、单位名称、ID、val),然后发布请求。除了手动创建多个标签,我可以自动化它或创建一个脚本来自动生成它吗?

    [
    {
   "name": "Test1",
    "description": "testings",
    "unitname": simple,
     "ID": 02,
     "val": "item"
     },
      {
     "name": "Test2",
     "description": "testing",
      "unitname": simple3,
       "ID": 23,
       "val": "item"
     }

         {
         "name": "Test3",
             "description": "testing",
            "unitname": simple4,
            "ID": 23,
            "val": "item"
            }
       {
          "name": "Test4",
         "description": "testing",
         "unitname": simple6,
           "ID": 23,
           "val": "item"
             } 
           ]

有什么帮助吗?

【问题讨论】:

    标签: jmeter


    【解决方案1】:
    1. JSR223 PreProcessor 添加为您需要发送生成的 JSON 的请求的子项
    2. 将以下代码放入“脚本”区域:

      import groovy.json.JsonBuilder
      import groovy.json.internal.LazyMap
      import org.apache.commons.lang3.RandomStringUtils
      
      def data = new ArrayList()
      
      1.upto(1000, {
          def entry = new LazyMap()
          entry.put('name', 'test' + it)
          entry.put('description', RandomStringUtils.randomAlphabetic(10))
          entry.put('unitname', 'simple')
          entry.put('ID', it)
          entry.put('val', 'item')
          data.add(entry)
      
      })
      
      def builder = new JsonBuilder()
      
      builder(
              data.collect {
                  [
                          name        : it.get('name'),
                          descrtiption: it.get('description'),
                          unitname    : it.get('unitname'),
                          ID          : it.get('ID'),
                          val         : it.get('val')
                  ]
              }
      )
      
      
      sampler.setPostBodyRaw(true)
      sampler.addNonEncodedArgument("", builder.toPrettyString(), "")
      
    3. 勾选Cache compiled script if available

    4. 确保在“语言”下拉菜单中选择了groovy

    就是这样,上面的脚本会生成一个JSON Array,并将其设置为HTTP Request采样器的主体。

    更多信息:

    【讨论】:

    • 感谢@Dmitri T 的回复。您能告诉我如何在POST 请求中设置上述JSON 脚本的响应吗?
    • 我已经按照您上面的建议创建了一个 JSR233 预处理器,但是我的 HTTP 请求中的 POST 数据在“查看结果树”中仍然是空白的。我错过了什么吗?我应该在 HTTP 请求 POST 数据部分使用 groovyscript 的返回值吗?
    • 我确实看过你关于如何使用 JSR Prepocessor stackoverflow.com/questions/36444737/… 的旧帖子。这个效果很好..但我无法使用 baove groovy 脚本..有什么帮助吗?我的 HTTP POST 请求正文在查看结果树上显示空白数据。
    • 已更正最后几行,请重试
    • 一个问题,变量'it'指的是什么? entry.put('name', 'test' + it)
    猜你喜欢
    • 2018-05-27
    • 2020-06-20
    • 1970-01-01
    • 2019-08-07
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多