jmeter元件執行順序及簡介


最近在學習Jmeter,在進行實操之前,先查看了官方文檔。因為官方文檔是英文的,為了方便以后查看,自己翻譯了一部分,中間個別地方根據自己的理解簡單地翻譯了部分。如果翻譯等有問題,歡迎指正。

一、執行順序

1、控制器和取樣器是有序的,當執行測試計划時,這些請求將按順序執行。如下圖:

2、一些控制器會影響它的子原件的順序,還有一些元件是分等級的。比如斷言,如果它的父元件是一個請求,那么它將作用於這個請求;如果它的父元件是一個控制器,那么它將作用於這個控制器下的全部的請求。如下圖:

Assertion#1僅被應用於請求one,Assertion#2作用於請求two 和three。

另一個復雜點的列子:

這個例子中,(定時器)Timer#1將應用於請求Two\Three\Four,Assertion#1將應用於請求Three。Timer#2將應用於所有的請求。

一般情況下,元件執行順序如下:

復制代碼
0.Configuration elements
1.Pre-Processors
2.Timers
3.Sampler
4.Post-Processors (unless SampleResult is null)
5.Assertions (unless SampleResult is null)
6.Listeners (unless SampleResult is null)
復制代碼

注意:Timers,Assertions,Pre- and Post-Processors 只有當一個sampler申請時才會執行。

舉例說明如下圖:

在這個例子中,執行的順序如下:

二、測試計划中的元件

1、線程組

線程組元件是所有測試計划的開始點。所有的控制器和samplers必須在線程組下,其他元件比如監聽器,也許會被直接添加在測試計划下,這樣這個監聽器將作用於所有的線程組。

線程組管理允許你(下面所列為線程組--線程屬性中可以配置的信息):

》設置線程數

》設置ramp-up period 

》設置循環次數

每個線程都是作為一個整體執行測試計划,並且完全獨立於其他線程。多線程用來模擬並發連接到你的服務應用中(Multiple threads are used to simulate concurrent connections to your server application.)

The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of threads chosen.如果有10個線程,ramp-up period是100秒,那么Jmeter將在100秒內啟動並執行這10個線程。每個線程將在前一個線程開始后10(100/10)秒啟動。如果是30個線程,ramp-up period是120秒,那么每個連續(successive)的線程將延長4秒。

Ramp-up needs to be long enough to avoid too large a work-load at the start of a test, and short enough that the last threads start running before the first ones finish (unless one wants that to happen).

默認情況下,都是設置為剛好線程組循環一次。

線程組也提供了調度器。可以在線程組--線程屬性中勾選框決定是否啟用調度器,然后在線程組-調度器配置框中,可以設置持續時間、啟動延遲、啟動時間和結束時間。持續時間和啟動延遲是用來控制每個線程組的持續時間,和在多少秒后每個線程組開始時間。當測試執行時,Jmeter都會等待startup delay中設置的秒數,再去啟動此線程組下的線程,並且執行時間為持續時間配置的秒數。注意,持續時間和啟動延遲優先於啟動時間和結束時間。

或者你可以使用啟動時間和結束時間。當測試開始時,如果必要的話Jmeter會等待start-time到達。每一次循環結束后,Jmeter會檢查end-time是否到達了,如果是,那么執行將停止。如果不是,將會繼續執行下去,知道循環結束。

2、控制器

Jmeter有兩種類型的控制器:Samplers和logical Controllers.

Samplers告訴Jmeter發送請求到服務器。比如,如果你想發送一個HTTP請求,你需要在Sampler中添加一個HTTP請求。你也可以通過添加一個或多個配置到Sampler中來自定義一個請求。

Logical Controllers:你可以通過自定義邏輯來使Jmeter決定什么時候發送請求。For example, you can add an Interleave Logic Controller to alternate between two HTTP Request Samplers.

2.1 Samplers

它告訴Jmeter發送請求到服務器,並且等待回應。 Controllers can be used to modify the number of repetitions of a sampler.

如果你發送到服務器的多個請求都有一樣的類型(比如HTTP請求),可以考慮使用一個默認值元件(比如HTTP請求默認值)。

記得添加監聽器來查看或保存請求的結果到電腦中。

2.2 Logic Controllers

邏輯控制器可以通過他們的子元件來改變請求的順序,或重復請求等等。

如下列:

(1)因為Login Request在Once Only Controller下,所以登錄請求只執行一次,下次迭代將跳過登錄請求。

(2)接下來會執行Load Search Page,因為這個沒有加控制器,所以正常執行。

(3)Load Search Page執行后,將需要執行兩個searches。但是這兩個searches前加了Interleave Controller,所以每執行完一個search,將重新執行Load Search Page???

(4)Interleave Controller下的HTTP默認值請求,當search A 和B都是一樣的HTTP請求,只是個別信息有異,在這里配置HTTP默認值請求,將節省配置步驟。

2.3 Test Fragments

Test Fragments是一種特別的控制器,跟線程組同一個級別。它區別於一個當被任何一個Module控制器或Include 控制器引用時才開始執行的線程組??

它在測試計划中純粹是為了代碼重用。(這個還是不明白做什么用的、、、)

3、監聽器

監聽器可以添加到測試中的任何一個地方。它們將從同等級或其下級元件中收集數據。

4、定時器

如果你不增加延時,Jmeter在短時間內發送多個請求時,可能會壓垮服務器。

5、斷言

斷言可以添加到任何一個Sampler中,它將作用於sampler范圍內。如果希望斷言只作用於單個sampler,可以在這個sampler中添加子元件斷言。

要查看斷言的結果,可以添加一個斷言監聽器到線程組中。結果與期望值不一樣的斷言,也可以在tree view和table listeners中查看。

6、配置元件

配置元件作用於同一級別或其子級別中。如下圖:

(1)HTTP Cookie Manager 在Simple Controller下,這個元件將作用於Web Page1 和Web Page2,而對Web Page3沒有影響。

同時,一個在樹內部的配置元件會比父支擁有更高的優先級。

(2)Web Defaults1和Web Defaults2 :Web Defaults1將影響Web Page2,而Web Defaults2將影響除Web Page2以外的HTTP請求。

注意點:User Defined Variables這個配置元件與上面所說的規則不同,它將在測試開始時執行,無論你放在哪個位置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM