How to Use the Parallel Controller in JMeter

本文我们将分析 Apache JMeter™ 的扩展之一 - 并行控制器(Parallel Controller)。 该控制器由 BlazeMeter 开发,作为对开源社区的贡献,由 Andrey Pokhilko 和 Artem Fedorov 开发。

并行控制器可用于创建并行请求。 并行请求是指不是一个接一个执行而是同时执行的请求。 例如,在加载脚本中处理 AJAX 请求或执行其他同步操作。

您可以使用 JMeter 插件管理器安装并行控制器。 它被称为并行控制器和采样器。 我们还需要一个 Dummy Sampler 和一个 WebSocket 插件来进行此演示,您也可以在 JMeter 插件管理器中找到它们。 我们将使用 Peter Doornbosch 的 Websocket Samplers。

现在我们将通过几个例子来看看并行控制器的特性。 让我们从一个简单的例子开始。

Using the Parallel Controller - A Simple Example

  1. 首先,让我们将控制器添加到测试计划中。 添加线程组后:

右键线程组->添加->逻辑控制器->bzm-并行控制器

  1. 还要在控制器内添加两个 Dummy Sampler 并将相同的特性应用到它们。

右键单击 Parallel Controller -> Add -> Samplers -> jp@gc Dummy Sampler

需要采样器来模拟发送 HTTP 请求。 您可以根据需要添加任何采样器。 现在脚本如下所示:

运行这个测试。

从上面的屏幕截图中可以看出,两个请求的开始时间是相同的。 这意味着请求是同时发送的。

第一个重要注意事项:如果您打开控制台,您将看到正在运行的线程数已变为 2。 也就是说,这个控制器创建了两个线程并同时运行它们。

Using the Parallel Controller - with Multiple Elements

如果您有多个采样器需要在一个线程中工作,则需要在逻辑上组合它们。 否则,并行控制器为其每个子元素创建新线程。

例如,您可以使用 Simple 控制器。 添加它:

右键单击线程组 -> 添加 -> 逻辑控制器 -> 简单控制器

现在,将应该组合的元素放在这个控制器下。

现在并行控制器将创建 2 个线程:第一个用于 Dummy 1 和 Dummy 2(在第一个简单控制器下),第二个用于 Dummy 3 和 Dummy 4(在第二个简单控制器下)。 另外,我们在Parallel Controller后面加了Dummy 5,在这两组执行完后才会执行。

Dummy 1 和2 的启动时间不同,Dummy 5 仅在Dummy 4 执行后才执行。

第二个重要注意事项:直到所有并行线程完成其工作后,测试的下一部分才会开始。

Running Threads Simultaneously - The Problem

第一个注意事项是控制器创建单独的线程并并行执行它们。 因此,在线程内部相互交互的采样器可能会出现问题。

为了演示,我们将使用 WebSocket 插件。 这个插件有一组采样器,可以通过线程内部的 WebSocket 会话连接。

如果 session 是在 Parallel 控制器之前创建的,并且采样器组的工作是在控制器内部执行的,我们会得到一个错误。 该错误表明 WS Sampler(位于控制器内部)的连接不存在。 您可以在下面的屏幕截图中看到这一点。

Running Threads Simultaneously - The Solution

如果测试计划中有相关元素,它们应该都放在并行控制器中。

Running All Parallel Controller Elements Before Moving On in the Test - The Problem

第二个注意事项是,直到所有并行线程完成其工作后,测试的下一部分才会开始。

我曾经有过这样的场景:用户通过 HTTP 请求获取大量数据,并通过 Web 套接字接收一段时间的信息。 当时间用完时,剧本说他应该去下一页。

这部分的测试如下。 在测试中,时间用完后要转到的页面称为“上次请求”。

问题是当时间用完时,接收消息的线程确实退出了,但是接收数据的线程直到接收到所有数据才完成运行。

因此,在数据加载完成之前,线程不会继续下一步。 但这种行为是错误的。 也就是说,需要在并行线程完成后以某种方式中断第二个线程的执行。

Running All Parallel Controller Elements Before Moving On in the Test - The Solution

一些采样器有一个超时字段。 就我而言,我使用了 HTTP 请求采样器,它有一个连接超时字段。 这意味着在指定的时间之后,采样器将完成其工作。 但是这个解决方案太狭隘了。

另一种解决方案如下。 假设您有一个不同的情况,并且在两个线程中,您都有一组在循环中执行的请求。 一个线程在接收到某个消息后结束,而第二个线程不知道该消息。 第二个应该在最后一次迭代后完成,您可以使用 Groovy 或 BeanShell 采样器通过设置变量的必要值来完成此操作。 例如,使用 vars.put(“isEnd”,“true”) 命令变量和‘isEnd’得到一个‘true’值。

这种情况将如下所示:

这里我们有两个并行线程:第一个线程带有 While 控制器,第二个线程带有 Loop 控制器(这个控制器代替了消息接收)。 在第二个线程中,在 Loop 控制器之后,您使用 Groovy 或 BeanShell 采样器设置值。 在第一个线程中,您在 While 控制器的条件中检查此变量的值,例如,使用以下条件:KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{isEnd}"==“true”)}。

Don’t Run a Parallel Controller in a Parallel Controller

还有一个无法解决的问题:不能在并联控制器内部添加并联控制器。 执行时会收到错误。 不要那样做。

The Parallel Sampler

Parallel Sampler 是控制器的轻量级版本,用于创建 Ajax 请求或其他并行 HTTP 请求。 采样器有一个简单的界面,如下面的屏幕截图所示。 您只需要输入所有并行 URL。

在处理完所有引用之前,采样器不会完成执行。 但是如果您想将它用于并行站点页面,请记住采样器也会执行网站页面上的所有链接。

总结

综上所述,Parallel Controller 是一个很好的请求并行控制器,对于测试具有并行动作的站点非常有用。 例如,在处理 WebSocket 请求或测试移动应用程序时,可能会有大量并行请求(如心跳请求)。 除了控制器,我们还有Parallel Sampler,可以用来创建并行的HTTP请求,极大地方便了脚本的结构,非常适合并行Ajax请求。

更多Jerry的原创文章,尽在:“汪子熙”:

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的错误相关推荐

  1. jMeter parallel controller 无法使用 CSV Data config 提供的变量?

    我的 jMeter test plan 里定义了一个 parallel controller,里面使用了一个变量 code: 该变量通过一个 csv 文件提供: 然而运行时,该 code 变量的值,无 ...

  2. jmeter逻辑控制器(事物控制器到底要不要勾选generate parent)

    前言: 1. Jmeter官网对逻辑控制器的解释是:"Logic Controllers determine the order in which Samplers are processe ...

  3. 实现接口Controller定义控制器

    实现接口Controller定义控制器 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含 ...

  4. PARALLEL(并行)

    在Oracle中,PARALLEL(并行)方式最大化调用计算机资源来成倍提高数据分析效率. 1. 用途 强行启用并行度来执行当前SQL.这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环 ...

  5. Java控制器controller_实现接口Controller定义控制器

    实现接口Controller定义控制器 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含 ...

  6. 《Java8实战》读书笔记06:Parallel Stream 并行流

    <Java8实战>读书笔记06:Parallel Stream 并行流 第7章 并行数据处理与性能 7.1 并行流 7.1.1 将顺序流转换为并行流 7.1.2 测量流性能 7.1.3 正 ...

  7. Kubernetes(k8s)的RC(Replication Controller)副本控制器

    1.RC(Replication Controller)副本控制器,Replication Controller的作用. 应用托管在kubernetes之后,kubernetes需要保证应用能够持续运 ...

  8. 手机服务器响应出错 错误码500,jmeter响应代码:500响应消息:内部服务器错误响应标头:...

    我正在运行jmeter并遇到此问题,我尝试过Cookie管理器和标头管理器,缓存管理器存在,问题仍然存在.jmeter响应代码:500响应消息:内部服务器错误响应标头: POST数据: store_i ...

  9. JMeter Logic Controller(逻辑控制器)之 ForEach Controller(循环控制器)

    官方文档:http://jmeter.apache.org/usermanual/component_reference.html#ForEach_Controller 1.ForEach Contr ...

最新文章

  1. ubuntu下pytorch
  2. SQLite主键自增需要设置为integer PRIMARY KEY
  3. java中的内存泄漏
  4. ipython怎么安装numpy_在TensorFlow教程中安装numpy后仍然无法导入
  5. C#动态加载dll,dll目录指定
  6. 新文速递 | 盒装数据:一种基于数据盒的数据产品形态
  7. adfs服务器获取信息失败,在ADFS服务器上SAML LogOutRequest处理失败
  8. 如何使用Xcode分析调试在真机运行的UE4 IOS版游戏
  9. ServletContentLIstener接口演示ServletContext的启动和初始化
  10. C++类成员空间分配和虚函数表
  11. 使用spring的事务的三种方法
  12. 清华大学 c语言 大作业,雷课堂(THUnderClass)——清华大学2020C++大作业个人项目记录与总结...
  13. 【Registration of 3D Point Clouds with Low Overlap】
  14. 使用Bus Hound抓USB转串口数据包,助力问题分析
  15. 在线音频剪辑、编辑工具
  16. GCC:warning:control reaches end of non-void function [-Wreturn-type] 、 Coredump的情况
  17. 李开复哥大毕业演讲:工程师的AI银河系漫游指南
  18. 什么是混合云战略,混合云战略有什么优势?
  19. 【历史上的今天】2 月 16 日:世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛
  20. 遭遇软件兼容问题——风云防火墙+江民杀毒软件+NetLimiter

热门文章

  1. 雨课堂知识点总结(十七)
  2. 【Linux就该这么学 20期培训笔记 01】部署虚拟环境安装linux系统
  3. #17# SCCM管理 - 软件中心 VS 应用程序目录网站点
  4. 基本概念学习(8000)---兼容机
  5. XTU 1250 Super Fast Fourier Transform
  6. 期望+DP ZOJ 3929 Deque and Balls
  7. 【转】SVM入门(一)SVM的八股简介
  8. 重置oracle 11G的system、sys密码
  9. ajax获取json数据为undefined--原因解析
  10. 洛谷P1157----组合数的输出