【问题标题】:JMeter - How to pass Multiline response data to the ForEach Controller requestJMeter - 如何将多行响应数据传递给 ForEach 控制器请求
【发布时间】:2019-10-22 05:05:36
【问题描述】:

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

Jmeter_Domian
Google
Yahoo
Facebook

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

${Jmeter_Domian} 是我的 regEx 变量,${Jmeter_Domian1} 是我的 forEachController 输出变量。

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

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

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

但预期的反应是

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

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

【问题讨论】:

  • 不会更改为{"request":[{"Domain":"${Jmeter_Domian1}"},{"Domain":"${Jmeter_Domian2}"},{"Domain":"${Jmeter_Domian3}"}]} 帮助吗?
  • 没有@dkb,当我根据您的场景使用时,我得到${Jmeter_Domian1} ${Jmeter_Domian2} 没有更新变量值。

标签: java performance jmeter


【解决方案1】:

您不能使用 ForEach 控制器来连接变量,它只能用于逐个迭代值。

如果您想从 3 个JMeter Variables 创建一个JSON,您需要使用任何JSR223 Test ElementGroovy 语言编写一些脚本,示例代码:

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} 的身份访问生成的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多