如何一个接一个地运行jmeter线程组

问题描述

接下来的情况:我需要使用 jmeter 运行性能测试。我已经设置了几个 Graphql 请求,对它们进行了测试,它们运行良好。接下来是流程的想法:

  1. 用户使用 graphql 突变登录平台,并在响应标头中收到 accesstoken,有效期为一个小时。
  2. 一个 graphql 请求必须解析生成的令牌,并使用此令牌执行下一个更改。
  3. 我们的想法是用 25 万个请求来测试平台,这需要 1 个多小时,正如您可能理解的那样 - 令牌已过期。

我在脚本中做了什么:

  1. 我创建了 2 个线程组。在第一个中,有一个 Flow is Control 操作元素,它被设置为 3600000 毫秒的暂停持续时间。这意味着它将每小时运行一次登录请求。
  2. 我正在使用 JSON 提取抓取令牌,并通过以下命令使用 BeanShell 后处理器对其进行解析:

intersection_A_B = sorted(list(set(listA_ID) & set(listB_ID))) # Convert Lists to Arrays np_listA_ID = np.asarray( listA_ID ) np_listB_ID = np.asarray( listB_ID ) # Comparison of two arrays np_list_ID,listA_ind,listB_ind = np.intersect1d(np_listA_ID,np_listB_ID,assume_unique=False,return_indices=True) # Keep only Items Needed np_listA_Var1 = np.asarray( listA_Var1 ) np_listB_Var1 = np.asarray( listB_Var1 ) # Covert Array to List again listA_ID=listB_ID=np_list_ID.tolist() listA_Var1 = np_listA_Var1[listA_ind].tolist() listB_Var1 = np_listB_Var1[listB_ind].tolist()

  1. 第二个线程组一个 Graphql 请求来执行对服务器的 250k 请求并使用来自 HTTP 标头的令牌值: props.put("accesstoken",vars.get("accesstoken"));

一切正常,接受这个事实,我不知道如何设置场景,在第二个线程组完成 250k 请求之后,登录线程组将完成其运行。 我已经尝试将循环控制器添加登录,设置为无限,但是一旦第二组将完成 250k 请求 - 运行不会完成,因为登录将永远运行一次。

有什么想法吗?

解决方法

您可以添加 Loop ControllerThroughput Controller 并将它们配置为执行这些 250k 请求后跟 Flow Control Action Sampler 配置如下:

enter image description here

到达采样器时 - 它会告诉所有线程组中的所有线程停止。

还要通知 since JMeter 3.1 you're supposed to be using JSR223 Test Elements and Groovy language for scripting 因此现在考虑迁移是有意义的。每小时使用 1 个线程存储一次属性不是您应该担心的事情,但是对于资源密集型任务 Groovy behaves much better(例如它具有 built-in JSON support,因此您可以丢弃 JSON Extractor)