有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JMeter如何将多行响应数据传递给ForEach控制器请求

面临从一个请求响应复制多条消息并在jmeter中传递给ForEachController请求的问题。我尝试过用正则表达式处理响应数据,并将其传递给forEachContr。但它只传递一个值,而不是传递多个值

Jmeter_Domian
Google
Yahoo
Facebook

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

${Jmeter_Domian}是我的正则表达式变量,${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"
        }
]

有人能帮我吗。谢谢


共 (1) 个答案

  1. # 1 楼答案

    不能将ForEach控制器用于变量串联,它只能用于逐个迭代值

    如果要从3JMeter 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'))
    

    演示:

    enter image description here

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