0

昨天我问了一个关于在 JMeter 上使用预处理器创建动态请求正文的问题。感谢 Dmitri T,我几乎得到了我想要的东西。

这里的老问题:JMeter Creating a Pre-Processor that will generate a request body based on a user defined variable


但是现在,我无法将 CSV 文件中的动态值放入请求正文中。

我的 CSV 文件示例数据:

Reading CSV successfully finished, 20 records found:
${id} = 1000011
${email} = a1000011@smartmessage.com
------------
${id} = 1000012
${email} = a1000012@smartmessage.com
------------
${id} = 1000013
${email} = a1000013@smartmessage.com

我的生成请求正文的预处理器:

    import groovy.json.JsonBuilder;
    
    def payload = [:]
    def X = 10 // read user input here somehow
    
    payload.put('message_job_id', '28b0a005-9ef1-475c-b33c-ade900f19e4c')
    payload.put('campaign_group', 'Entegrasyon')
    payload.put('template_id', 'cf585c8c-c675-40d2-b88a-ade900c898d5')
    
    def recipient_list = []
    1.upto(X, { x ->
        def recipient = [:]
        recipient.put('customer_id', vars.get('id') + x)
        def target = [:]
        def address = ['address': vars.get('email' + x)]
        target.put('target', address)
        recipient.put('target', target)
        recipient_list.add(recipient)
    })
    
    payload.put('recipient_list', recipient_list)
    
    
    vars.put('payload', new groovy.json.JsonBuilder(payload).toPrettyString())

我在查看结果树中生成的请求正文:

  {
        "message_job_id": "28b0a005-9ef1-475c-b33c-ade900f19e4c",
        "campaign_group": "Entegrasyon",
        "template_id": "cf585c8c-c675-40d2-b88a-ade900c898d5",
        "recipient_list": [
            {
                "customer_id": "10000111",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000112",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000113",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000114",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000115",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000116",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000117",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000118",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "10000119",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            },
            {
                "customer_id": "100001110",
                "target": {
                    "target": {
                        "address": null
                    }
                }
            }
        ]
    }

如您所见,地址键始终具有空值,但我想用 CSV 文件中的电子邮件变量填充此键。

4

1 回答 1

0

如果您需要从 CSV 文件构建请求正文并在“一次”中从多行发送数据 - 您将无法使用CSV 数据集配置和衍生工具来实现这一点,因为 CSV 数据集配置会为每次迭代读取下一行每个用户的。

如果您需要在单个迭代的范围内读取多行 - 您将需要切换到__CSVRead() 函数直接在 Groovy 中从 CSV 文件中读取数据

于 2021-12-28T07:45:39.337 回答