首页 > 解决方案 > 如何在一组请求具有相同数据字段(与其他集合不同)的线程组中有请求?

问题描述

我在 jmeter 中有两个单独的线程组,

First Thread Group : 对应于第一个线程组的所有用户负责点击创建用户并返回 userId 作为响应的 API

第二线程组:第二线程组对应的所有用户负责点击一个API,该API为创建的用户上传照片,并使用userId(在之前的响应中返回)作为其请求数据。

我使用了 jmeter 的 InterThreadCommunication 插件,因此来自第一个线程组的 API 命中响应的用户 ID 被映射到第二个线程组的 API 命中的请求数据。

问题是在线程组 2 中,我需要运行用户的上传图像 5 次(以便有一组对应于每个用户的图像)。如何扩展 InterThreadCommunication 功能以将一个 userId 从 threadGroup1 映射到 threadGroup2 的 5 个请求(类似地,另一个 userId 映射到另外 5 个请求)

当前实施:

线程组 1:

jp@gc - 线程间通信后处理器:

要放入数据的 FIFO 队列名称:userIdList

valueToPut:$ 用户ID

线程组 2:

jp@gc - 线程间通信预处理器

要从中获取数据的 FIFO 队列名称:userIdList

存储数据的变量名:userId

线程组 2 请求数据,我将值用作 $ userId

标签: performancejmeterperformance-testingjmeter-pluginsjmeter-5.0

解决方案


只需使用Once Only Controller获取一次,然后使用Loop Controller执行请求 5 次

如果线程间通信插件不够灵活,无法满足您的需求,您可以随时切换到在线程组之间传递值的另一种方法,即

  1. 使用__setProperty()__threadNum()函数组合将值存储在第一个线程组中,例如:

    ${__setProperty(userid_${__threadNum}, YOUR_VALUE_HERE,)}
    
  2. 使用__P()和 __threadNum() 函数组合来读取第二个线程组中的值,例如:

     ${__P(userid_${__threadNum},)}
    

    在此处输入图像描述

查看Apache JMeter Functions - An Introduction article,了解有关 JMeter Functions 概念的更多信息。


推荐阅读