如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的错误
How to Use the Parallel Controller in JMeter
本文我們將分析 Apache JMeter? 的擴展之一 - 并行控制器(Parallel Controller)。 該控制器由 BlazeMeter 開發(fā),作為對開源社區(qū)的貢獻,由 Andrey Pokhilko 和 Artem Fedorov 開發(fā)。
并行控制器可用于創(chuàng)建并行請求。 并行請求是指不是一個接一個執(zhí)行而是同時執(zhí)行的請求。 例如,在加載腳本中處理 AJAX 請求或執(zhí)行其他同步操作。
您可以使用 JMeter 插件管理器安裝并行控制器。 它被稱為并行控制器和采樣器。 我們還需要一個 Dummy Sampler 和一個 WebSocket 插件來進行此演示,您也可以在 JMeter 插件管理器中找到它們。 我們將使用 Peter Doornbosch 的 Websocket Samplers。
現(xiàn)在我們將通過幾個例子來看看并行控制器的特性。 讓我們從一個簡單的例子開始。
Using the Parallel Controller - A Simple Example
右鍵線程組->添加->邏輯控制器->bzm-并行控制器
右鍵單擊 Parallel Controller -> Add -> Samplers -> jp@gc Dummy Sampler
需要采樣器來模擬發(fā)送 HTTP 請求。 您可以根據(jù)需要添加任何采樣器。 現(xiàn)在腳本如下所示:
運行這個測試。
從上面的屏幕截圖中可以看出,兩個請求的開始時間是相同的。 這意味著請求是同時發(fā)送的。
第一個重要注意事項:如果您打開控制臺,您將看到正在運行的線程數(shù)已變?yōu)?2。 也就是說,這個控制器創(chuàng)建了兩個線程并同時運行它們。
Using the Parallel Controller - with Multiple Elements
如果您有多個采樣器需要在一個線程中工作,則需要在邏輯上組合它們。 否則,并行控制器為其每個子元素創(chuàng)建新線程。
例如,您可以使用 Simple 控制器。 添加它:
右鍵單擊線程組 -> 添加 -> 邏輯控制器 -> 簡單控制器
現(xiàn)在,將應該組合的元素放在這個控制器下。
現(xiàn)在并行控制器將創(chuàng)建 2 個線程:第一個用于 Dummy 1 和 Dummy 2(在第一個簡單控制器下),第二個用于 Dummy 3 和 Dummy 4(在第二個簡單控制器下)。 另外,我們在Parallel Controller后面加了Dummy 5,在這兩組執(zhí)行完后才會執(zhí)行。
Dummy 1 和2 的啟動時間不同,Dummy 5 僅在Dummy 4 執(zhí)行后才執(zhí)行。
第二個重要注意事項:直到所有并行線程完成其工作后,測試的下一部分才會開始。
Running Threads Simultaneously - The Problem
第一個注意事項是控制器創(chuàng)建單獨的線程并并行執(zhí)行它們。 因此,在線程內部相互交互的采樣器可能會出現(xiàn)問題。
為了演示,我們將使用 WebSocket 插件。 這個插件有一組采樣器,可以通過線程內部的 WebSocket 會話連接。
如果 session 是在 Parallel 控制器之前創(chuàng)建的,并且采樣器組的工作是在控制器內部執(zhí)行的,我們會得到一個錯誤。 該錯誤表明 WS Sampler(位于控制器內部)的連接不存在。 您可以在下面的屏幕截圖中看到這一點。
Running Threads Simultaneously - The Solution
如果測試計劃中有相關元素,它們應該都放在并行控制器中。
Running All Parallel Controller Elements Before Moving On in the Test - The Problem
第二個注意事項是,直到所有并行線程完成其工作后,測試的下一部分才會開始。
我曾經(jīng)有過這樣的場景:用戶通過 HTTP 請求獲取大量數(shù)據(jù),并通過 Web 套接字接收一段時間的信息。 當時間用完時,劇本說他應該去下一頁。
這部分的測試如下。 在測試中,時間用完后要轉到的頁面稱為“上次請求”。
問題是當時間用完時,接收消息的線程確實退出了,但是接收數(shù)據(jù)的線程直到接收到所有數(shù)據(jù)才完成運行。
因此,在數(shù)據(jù)加載完成之前,線程不會繼續(xù)下一步。 但這種行為是錯誤的。 也就是說,需要在并行線程完成后以某種方式中斷第二個線程的執(zhí)行。
Running All Parallel Controller Elements Before Moving On in the Test - The Solution
一些采樣器有一個超時字段。 就我而言,我使用了 HTTP 請求采樣器,它有一個連接超時字段。 這意味著在指定的時間之后,采樣器將完成其工作。 但是這個解決方案太狹隘了。
另一種解決方案如下。 假設您有一個不同的情況,并且在兩個線程中,您都有一組在循環(huán)中執(zhí)行的請求。 一個線程在接收到某個消息后結束,而第二個線程不知道該消息。 第二個應該在最后一次迭代后完成,您可以使用 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
還有一個無法解決的問題:不能在并聯(lián)控制器內部添加并聯(lián)控制器。 執(zhí)行時會收到錯誤。 不要那樣做。
The Parallel Sampler
Parallel Sampler 是控制器的輕量級版本,用于創(chuàng)建 Ajax 請求或其他并行 HTTP 請求。 采樣器有一個簡單的界面,如下面的屏幕截圖所示。 您只需要輸入所有并行 URL。
在處理完所有引用之前,采樣器不會完成執(zhí)行。 但是如果您想將它用于并行站點頁面,請記住采樣器也會執(zhí)行網(wǎng)站頁面上的所有鏈接。
總結
綜上所述,Parallel Controller 是一個很好的請求并行控制器,對于測試具有并行動作的站點非常有用。 例如,在處理 WebSocket 請求或測試移動應用程序時,可能會有大量并行請求(如心跳請求)。 除了控制器,我們還有Parallel Sampler,可以用來創(chuàng)建并行的HTTP請求,極大地方便了腳本的結構,非常適合并行Ajax請求。
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 紫光展锐T750平台发布:6nm EUV
- 下一篇: 对称密钥体制和公钥密码体制的特点各是什么