繁体   English   中英

JMeter - 如何将多行响应数据传递给 ForEach Controller 请求

[英]JMeter - How to pass Multiline response data to the ForEach Controller request

面临从一个请求响应复制多条消息并传递给 jmeter 中的 forEachContoller 请求的问题。 我尝试使用 RegEx 处理响应数据并传递给 forEachContr。 但它只传递一个值,而不是传递多个值

Jmeter_Domian
Google
Yahoo
Facebook

我想将此响应数据传递给下一个 forEachController 请求。

${Jmeter_Domian} 是我的正则表达式变量,${Jmeter_Domian1} 是我的 forEachController Output 变量。

{
    "request": [
        {
            "Domain": "${Jmeter_Domian1}"
        },
        {
            "Domain": "${Jmeter_Domian1}"
        },
        {
            "Domain": "${Jmeter_Domian1}"
        }
]

我已经执行了上述场景,但它正在通过

{
    "request": [
        {
            "Domain": "Google"
        },
        {
            "Domain": "Google"
        },
        {
            "Domain": "Google"
        }
]

但预期的反应是

{
    "request": [
        {
            "Domain": "Google"
        },
        {
            "Domain": "Yahoo"
        },
        {
            "Domain": "Facebook"
        }
]

任何人都可以帮助我。 谢谢!

使用不带 1 的变量名:

{
    "request": [
        {
            "Domain": "${Jmeter_Domian}"
        },
        {
            "Domain": "${Jmeter_Domian}"
        },
        {
            "Domain": "${Jmeter_Domian}"
        }
]

考虑将名称更改为Jmeter_Domain

您不能将 ForEach Controller 用于变量连接,它只能用于逐个迭代值。

如果要从 3 个JMeter 变量创建 JSON 变量则需要使用任何JSR223 测试元素Groovy语言编写一些脚本,示例代码:

def data = new ArrayList()

1.upto(vars.get('Jmeter_Domian_matchNr') as int, {
    def entry = new groovy.json.internal.LazyMap()
    entry.put('Domain', vars.get("Jmeter_Domian_" + it))
    data.add(entry)
})

def builder = new groovy.json.JsonBuilder()
builder(request: data.collect { it })

vars.put('myRequest', builder.toPrettyString())

log.info('Generated request: ')
log.info(vars.get('myRequest'))

演示:

在此处输入图像描述

您将能够在需要时以${myRequest}的形式访问生成的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM