最近在學習Jmeter,在進行實操以前,先查看了官方文檔。由於官方文檔是英文的,爲了方便之後查看,本身翻譯了一部分,中間個別地方根據本身的理解簡單地翻譯了部分。若是翻譯等有問題,歡迎指正。服務器
1、執行順序多線程
一、控制器和取樣器是有序的,當執行測試計劃時,這些請求將按順序執行。以下圖:併發
二、一些控制器會影響它的子原件的順序,還有一些元件是分等級的。好比斷言,若是它的父元件是一個請求,那麼它將做用於這個請求;若是它的父元件是一個控制器,那麼它將做用於這個控制器下的所有的請求。以下圖:app
Assertion#1僅被應用於請求one,Assertion#2做用於請求two 和three。less
另外一個複雜點的列子:學習
這個例子中,(定時器)Timer#1將應用於請求Two\Three\Four,Assertion#1將應用於請求Three。Timer#2將應用於全部的請求。測試
通常狀況下,元件執行順序以下:spa
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申請時纔會執行。線程
舉例說明以下圖:翻譯
在這個例子中,執行的順序以下:
2、測試計劃中的元件
一、線程組
線程組元件是全部測試計劃的開始點。全部的控制器和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是否到達了,若是是,那麼執行將中止。若是不是,將會繼續執行下去,知道循環結束。
二、控制器
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 控制器引用時纔開始執行的線程組??
它在測試計劃中純粹是爲了代碼重用。(這個仍是不明白作什麼用的、、、)
三、監聽器
監聽器能夠添加到測試中的任何一個地方。它們將從同等級或其下級元件中收集數據。
四、定時器
若是你不增長延時,Jmeter在短期內發送多個請求時,可能會壓垮服務器。
五、斷言
斷言能夠添加到任何一個Sampler中,它將做用於sampler範圍內。若是但願斷言只做用於單個sampler,能夠在這個sampler中添加子元件斷言。
要查看斷言的結果,能夠添加一個斷言監聽器到線程組中。結果與指望值不同的斷言,也能夠在tree view和table listeners中查看。
六、配置元件
配置元件做用於同一級別或其子級別中。以下圖:
(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這個配置元件與上面所說的規則不一樣,它將在測試開始時執行,不管你放在哪一個位置。