首页 > 解决方案 > JMeter - 如何为 REST 服务有效负载发送随机数量的有效负载行?

问题描述

下面的“有效负载”图片显示了 GROUND_SERVICE 的 3 个行项目,所有值,如 SERVICE_TYPE_CODE、ORIG_ZIP、DEST_ZIP、UNITS_SHIPPED、START_DATE 都必须参数化。我不能总是发送 3 个 GROUND_SERVICE 订单项的请求。我需要发送随机数量的 GROUND_SERVICE 行,在这种情况下介于 1 到 3 之间。实际上我将有大约 20 个行项目。如何在参数化 GROUND_SERVICE 元素中的所有值时做到这一点?

有效载荷

收到 DMITRI 的建议后编辑的问题如下:

我认为建议的代码允许我发送随机数量的 GROUND_SERVICE 块,如果这样可以解决我的一半问题。但是,我无法随机化 ORIG_ZIP、UNITS_SHIPPED 等数据元素。它们必须从 CSV 文件中提取。我怎样才能做到这一点?为了清楚起见,我编造了这些数据元素来保护敏感数据。实际上,请求包含不同类型的数据元素以及通过规则引擎的测试数据,因此我必须从 CSV 文件中提取实际数据。

标签: jmeter

解决方案


  1. 添加JSR223 PreProcessor作为要参数化的 HTTP 请求采样器的子级
  2. 将以下代码放入“脚本”区域:

    import groovy.xml.MarkupBuilder
    import org.apache.commons.lang3.RandomUtils
    import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
    
    def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)
    
    static def getRandomGroundServices(MarkupBuilder xml) {
        1.upto(RandomUtils.nextInt(1, 4), { number ->
            xml.GROUND_SERVICES() {
                GROUND_SERVICE() {
                    SERVICE_TYPE_CODE(number + "DAY")
                    ORIG_ZIP(RandomUtils.nextInt(11111, 99999))
                    UNITS_SHIPPED(RandomUtils.nextInt(1, 10))
                    START_DATE(new Date().plus(number).format('yyyy-MM-dd'))
    
                }
            }
        })
    };
    
    getRandomGroundServices(xml)
    
    vars.put('payload', writer.toString())
    

    在此处输入图像描述

  3. 就是这样,现在您可以根据${payload}需要引用随机有效负载:

    在此处输入图像描述

  4. 每次运行请求时,不同数量的GROUND_SERVICE元素将使用随机的 UNITS_SHIPPED 和 ORIG_ZIP 发送到后端

    在此处输入图像描述

参考:


推荐阅读