JMeter - 在另一个线程组

时间:2017-08-31 18:24:22

标签: jmeter

我目前有一个测试计划,我使用随机变量向给定的网址提交请求请求(/app/${app_id})。

我还想重新使用随机变量app_id来轮询该应用的状态(/app/${app_id}/status)。请注意,状态URL会有多个请求。

我目前的想法是:

  1. 有一个提交帖子的线程组
  2. 保存随机生成的app_id s
  3. 列表
  4. 在另一个线程组中,阅读app_id列表并为每个app_id循环状态请求
  5. 这是一种明智的做法吗?如果是这样,我该如何保存随机生成的app_id然后阅读它们?

    另外,如果对这种情况有更好的解决方法,我全心全意:)

2 个答案:

答案 0 :(得分:0)

使用线程组的解决方案是可行的,尽管您也可以通过将其中一个线程配置为“监视器”来完成一个线程组中的所有操作,而其余线程则提交帖子。像这样:

    Thread Group
        If [${__threadNum} == 1]
            Samplers to check status
        If [${__threadNum} != 1]
            Samplers to submit posts

对两种类型的用户使用1个线程组的一个原因是,如果在写入和读取app_id列表之间需要任何类型的同步 - 这在一个线程组中更容易实现。或者,如果您已经有许多线程组。

至于为各种线程/线程组提供app_id,您可以使用以下方法之一:

  1. 要在没有文件的情况下将ID从一个线程组传递到另一个线程组,您可以使用其中一种方法here(使用属性是最常用的方法)。

    在您的情况下,最简单的方法是将它们保存在一个带有分隔符的属性中,例如: ID1,ID2,...。然后,“status”线程可以获取此属性,使用脚本或__split函数将其拆分为将属性转换为序列化变量:app_id_1app_id_2等。这些变量是自然选择ForEach Controller

  2. 第一个线程组也可以将app_id保存到文件中,而另一个线程组则使用CSV Data Set Config从同一个文件中读取。但是有点谨慎,如果他们同时这样做的话。

  3. 如果可以预先生成app-id,那么更经济的方法是使用SetUp Thread生成它们并将它们保存到CSV文件(您只需要一个脚本,例如BeanShell这样做,请参见示例here)。然后两个线程组都使用CSV Data Set Config

  4. 从该文件中读取

答案 1 :(得分:0)

您可以使用__setProperty()函数将值从一个线程组传递到另一个线程组:

${__setProperty(appid-${__counter(FALSE)},${your_variable_holding_appid},)}

每次调用该函数时,它将以

的形式生成JMeter属性
appid-1=foo
appid-2=bar
appid-3=baz
etc. 

12等数字来自__counter() function

在另一个线程组中,您将能够使用__P() function访问生成的值,如:

${__P(appid-${__counter(FALSE)},)}

演示:

Sharing Variables between Thread Groups

有关JMeter功能概念的更多信息,请参阅Apache JMeter Functions - An Introduction

在线程甚至线程组之间传递JMeter变量有更多“高级”方法,而且你将能够同步你的线程,即在第二个线程组中不启动线程,直到使用{{3未设置变量}} 插入。

相关问题