天天看點

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

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 請求。 您可以根據需要添加任何采樣器。 現在腳本如下所示:

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

運作這個測試。

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

從上面的螢幕截圖中可以看出,兩個請求的開始時間是相同的。 這意味着請求是同時發送的。

第一個重要注意事項:如果您打開控制台,您将看到正在運作的線程數已變為 2。 也就是說,這個控制器建立了兩個線程并同時運作它們。

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

Using the Parallel Controller - with Multiple Elements

如果您有多個采樣器需要在一個線程中工作,則需要在邏輯上組合它們。 否則,并行控制器為其每個子元素建立新線程。

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

右鍵單擊線程組 -> 添加 -> 邏輯控制器 -> 簡單控制器

現在,将應該組合的元素放在這個控制器下。

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

現在并行控制器将建立 2 個線程:第一個用于 Dummy 1 和 Dummy 2(在第一個簡單控制器下),第二個用于 Dummy 3 和 Dummy 4(在第二個簡單控制器下)。 另外,我們在Parallel Controller後面加了Dummy 5,在這兩組執行完後才會執行。

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

Dummy 1 和2 的啟動時間不同,Dummy 5 僅在Dummy 4 執行後才執行。

第二個重要注意事項:直到所有并行線程完成其工作後,測試的下一部分才會開始。

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

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。

在處理完所有引用之前,采樣器不會完成執行。 但是如果您想将它用于并行站點頁面,請記住采樣器也會執行網站頁面上的所有連結。

如何使用 jMeter Parallel Controller - 并行控制器以及一些常犯的錯誤

總結

綜上所述,Parallel Controller 是一個很好的請求并行控制器,對于測試具有并行動作的站點非常有用。 例如,在處理 WebSocket 請求或測試移動應用程式時,可能會有大量并行請求(如心跳請求)。 除了控制器,我們還有Parallel S

ails/120762085