最近在學習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這個配置元件與上面所說的規則不同,它將在測試開始時執行,無論你放在哪個位置。