在JMeter中,如何从CSV文件中为每个元素选择不同的值时创建多个有效负载块?

时间:2019-10-06 20:49:59

标签: jmeter

在下面的示例中,我需要随机发送1到10个<ACCOUNT>有效载荷块(该示例显示4个<ACCOUNT>有效载荷块),而元素{{ 1}},<ACCOUNT_TYPE_CODE><OPEN_DATE>需要从CSV文件中顺序或随机选择值。即使是同一线程,也需要为<MEMBER_ID>有效负载的每个块选择不同的值。我如何在JMeter中做到这一点?谢谢。

<ACCOUNT>

1 个答案:

答案 0 :(得分:0)

如果您的XML文件如下所示:

CD,2019-10-06,68768789799
Checking,2019-10-05,45667568797
Saving,2019-10-04,24535456677
Money Market,2019-10-03,898977867554
  1. JSR223 PreProcessor添加为您要参数化的请求主体HTTP Request的子项
  2. 将以下代码放入“脚本”区域:

    import groovy.xml.MarkupBuilder
    import org.apache.commons.lang3.RandomUtils
    
    def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)
    
    def csvFileLines = new File('test.csv').readLines()
    
    def lineCounter = 0
    
    xml.IN("xmlns:ns3": "http://schema.example.com/queryparam", "xmlns:ns2": "http://schema.example.com/header", "xmlns": "http://schema.example.com/Account/CreateAC") {
        "ns2:HEADER"() {
            ns2:
            TRANID("hgjhkjhjkhjg")
            ns2:
            TIMESTAMP("2019-10-06T15:32:470Z")
        }
        "ns3:QUERY"() {
            "ns3:PARAM"() {
                "ns3:ITEM"("OPERATOR")
                "ns3:VALUE "("CREATEAC")
            }
        }
    
        xml.ACCOUNT_SPECIFIC() {
            1.upto(RandomUtils.nextInt(1, 11), {
                def line = csvFileLines.get(lineCounter)
                def entries = line.split(",")
                ACCOUNT() {
                    ACCOUNT_TYPE_CODE(entries[0].trim())
                    OPEN_DATE(entries[1].trim())
                    MEMBER_ID(entries[2].trim())
                }
                lineCounter++
            })
        }
    }
    
    sampler.addNonEncodedArgument('', writer.toString(), '')
    sampler.setPostBodyRaw(true)
    
  3. 就是这样,上面的代码将生成1到10个ACCOUNT块,并将生成的数据设置为HTTP Request采样器主体数据。总体测试计划应类似于:

    enter image description here

参考文献: