如何在 JMeter 中的线程之间高效地为大量用户传递数据

问题描述 投票:0回答:1

我被分配了根据以下标准测试站点的任务:

  • 使用 2 个用户登录每个租户
  • 用户 1 应创建销售订单
  • 用户2应更新销售订单
  • 用户1应确认销售订单
  • 用户 2 应生成报告

我在这里面临的主要问题是区分任务并将其委派给用户!

我尝试使用 CSV 文件来记录登录详细信息以及租户名称,但每个线程都以相同的方式读取文件并为用户 1 分配详细信息,本质上使每个用户都成为用户 1。

我当前使用的 make shift 方式是将用户的 CSRF-Token 和 JSessionID 设置为格式为

tenantNumber_userNumber_csrfToken
tenantNumber_userNumber_jSessionId
的属性。 然后使用 JSR223 脚本来创建

def lastTenantId = vars.get("lastTenantId")
def jSessionId = vars.get("jSessionId")
def csrfToken = vars.get("csrfToken")

def baseTenantVar = "${lastTenantId}_user"


if (props.getProperty(baseTenantVar + "1_jSessionId") == null) {
    props.put(baseTenantVar + "1_jSessionId", jSessionId)
     props.put(baseTenantVar + "1_csrfToken", csrfToken)
     log.info("Assigned User 1 for tenant ${lastTenantId}")
} else {
    props.put(baseTenantVar + "2_jSessionId", jSessionId)
     props.put(baseTenantVar + "2_csrfToken", csrfToken)
     log.info("Assigned User 2 for tenant ${lastTenantId}")
}

并摧毁

def tenantNumber = vars.get("tenantNumber")

props.remove("test${tenantNumber}_user1_jSessionId")
props.remove("test${tenantNumber}_user1_csrfToken")
log.info("removed User 1 for tenant ${tenantNumber}")

props.remove("test${tenantNumber}_user2_jSessionId")
props.remove("test${tenantNumber}_user2_csrfToken")
log.info("removed User 2 for tenant ${tenantNumber}")

props.remove("test${tenantNumber}_SO_id")
log.info("removed the sale order id for tenant ${tenantNumber}")

每次线程组运行时都会有这些属性。

登录后,我想要执行的任何操作,例如用户1,都会用If控制器封装,以检查当前的CSRF-Token和JSessionID是否与租户的用户1匹配。

这是小规模完成我的工作,不到 50 个用户只是为了创建和测试发送的数据和执行的操作是否按预期工作,但真正的测试我必须使用 1000、2000 和 5000 个并发用户,我确信这不是一个非常节省内存的想法。

我还可以尝试哪些其他方法来获得相同的输出?

testing jmeter
1个回答
0
投票

Groovy 脚本已编译并缓存,因此从内存角度来看应该没问题。

我能想到的另一种方法是使用线程间通信插件,它提供了一个FIFO队列,可以跨线程共享并同时写入/读取

您可以使用JMeter插件管理器

安装线程间通信插件
© www.soinside.com 2019 - 2024. All rights reserved.