共计 2693 个字符,预计需要花费 7 分钟才能阅读完成。
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
- 首先,让咱们将控制器增加到测试计划中。增加线程组后:
右键线程组 -> 增加 -> 逻辑控制器 ->bzm- 并行控制器
- 还要在控制器内增加两个 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 控制器的条件中查看此变量的值,例如,应用以下条件:${__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 的原创文章,尽在:” 汪子熙 ”: