JMeter-如何为REST服务有效负载发送随机数量的有效负载行?

时间:2019-09-26 13:36:23

标签: jmeter

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

Payload

在收到DMITRI的建议后的修改后的问题:

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

1 个答案:

答案 0 :(得分:0)

  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())
    

    enter image description here

  3. 就是这样,现在您可以在需要的地方将随机有效负载称为${payload}

    enter image description here

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

    enter image description here

参考文献: