Apache JMeter 是Apache組織的開放源代碼項目,是一個純Java桌面應用,用於壓力測試和性能測量。它最初被設計用於Web應用測試但後來擴展到其它測試領域。javascript
操做頁面以下:html
Apache JMeter能夠用於對靜態的和動態的資源(文件,Servlet,Perl腳本,Java對象,數據庫和查詢,FTP服務器或是其它資源)的性能進行測試。JMeter能夠用於分析不一樣壓力條件下的整體性能狀況。也可使用JMeter提供的圖形化界面,分析性能指標或者在高負載狀況下測試你的服務器,腳本,對象。html5
1.1.1安裝java
步驟一:要安裝一個構建版本,簡單解壓zip/tar文件到你想安裝JMeter的目錄。保證一個JRE/JDK正確的安裝而且設置環境變量JAVA_HOME。mysql
步驟二:運行JMeter, 運行 jmeter.bat web
用來描述一個性能測試,包含與本次性能測試全部相關的功能。也就說本的性能測試的全部內容是於基於一個計劃的。ajax
線程組元件是任何一個測試計劃的開始點,在一個測試計劃中的全部元件都必須在某個線程組下。用於控制Jmeter執行測試計劃時使用的線程數量。正則表達式
設置線程數算法
設置ramp-up periodsql
設置測試要執行的次數
每一個線程將會獨立運行測試計劃,互不干擾。多個線程用於模仿對服務器的併發訪問。ramp-up period指jmeter用於達到所有選擇的線程的時間,單位是s,30個線程時間設置120秒,那麼線程相繼間隔爲4秒。
循環次數,若是次數設置爲1,那麼jmeter在中止前只執行測試計劃一次。
啓動時間:測試計劃何時啓動,啓動延遲會覆蓋它。當啓動時間已過,手動運行腳本時也當前時間也會覆蓋它(但啓動時間頁面顯示不會變)。
結束時間:測試計劃何時結束,持續時間會覆蓋它。
持續時間(秒):測試計劃持續多長時間,會覆蓋結束時間。
啓動延遲(秒):測試計劃延遲多長時間啓動,會覆蓋啓動時間。
Jmeter有兩種類型的控制器:取樣器和邏輯控制器
取樣器指jmeter向一個服務器發送請求。目前有以下取樣器:
FTP請求、HTTP請求、JDBC請求、JAVA請求、LDAP請求、SOAP/XML-RPC請求、WEB服務請求。每一個取樣器有幾個能夠設置的屬性。能夠向取樣器添加一個或多個配置元件來進一步的控制取樣器。Jmeter以你向樹中添加取樣器的順序發送請求。
邏輯控制器容許你定製jmeter什麼時候發送請求。邏輯控制器包括取樣器,配置元件,其餘邏輯控制等。邏輯控制器可以更改他的子元件中的請求的順序。
做用:臨界區控制器確保其子節點下的取樣器或控制器將被執行(只有一個線程做爲一個鎖)
Lock name:鎖名稱,這裏能夠填入其子節點下執行的線程的名稱,這個線程做爲一個全局鎖存在
做用:用來遍歷當前元素的全部可執行場景;在用戶自定義變量中讀取一系列相關的變量,該控制器下的採樣器或控制器都會被執行一次或屢次,每次讀取不一樣的變量值;
輸入變量前綴:在其中輸入須要遍歷的用戶參數(User Parameter)
Start index for loop(exclusive):循環指數開始(惟一)→ 遍歷查詢的變量範圍,開始的值(這裏若是不填寫,默認從1開始,若是沒有1開始的變量,執行時會報錯)
End index for loop(inclusive):循環指數結束(包含)→ 遍歷查詢的變量範圍,結束的值
輸出變量名稱:將遍歷查詢到的符合條件的用戶參數賦值給輸入變量(Vname),而後就能夠在控制器下的取樣器使用,格式爲${輸出變量名}
Add」_」before number:輸入變量名稱中是否使用「_」進行間隔
PS:這個控制器通常配合配置元件→ 正則表達式提取器來一塊兒使用,可對頁面上的某些元素進行重複處理。
做用:用於引用外部的Jmx文件;從而控制多個測試計劃組合
include Test Plan:包含測試計劃的文件名,能夠點擊瀏覽,從文件夾保存的JMX文件夾目錄下選擇對應的JMX文件
使用方法:建立一個測試計劃,下面可添加取樣器/控制器等,而後保存測試計劃,爲了方便起見, 線程組也能夠添加外部JMX文件中用於調試;
若是測試使用Cookie或用戶定義的變量,這些應放置在頂層(包括文件),不然沒法正常工做;此元素不支持變量/函數在文件名字段中;可是,若是屬於包含控制器定義的內容,則使用前綴路徑名。
當使用包含控制器中包含相同的JMX文件,則要確保文件名不一樣,以免沒法讀取;若是文件不能被發現,那麼控制器會嘗試打開文件名相對於JMX啓動目錄。
做用:用於控制該控制器下的取樣器/控制器的運行時間
Runtime(seconds):運行時間,單位爲:秒
做用:經過給該控制器中的value賦值,來指定運行哪一個取樣器(也能夠理解爲開關控制器)
Switch value:控制器具體賦值的value值字段
有兩種賦值方式:
①.第一種是數值,Switch控制器下的子節點從0開始計數,經過指定子節點所在的數值來肯定執行哪一個元素。
②.第二種是直接指定子元素的名稱,好比採樣器的Name來進行匹配。當指定的名稱不存在時,不執行任何元素。
當Value爲空時,默認執行第1個子節點元素。
做用:運行其子節點下的取樣器/控制器,直到條件爲「假」
Condition(function or variable):條件(函數或變量):裏面可填入判斷依據的條件,參照使用方法:可能的條件值有:
①.空白:最後一個示例循環失敗時退出循環
②.最後一個值:最後一個示例循環失敗時退出循環。 若是以前的最後一個示例只是循環失敗,不進入循環。
③.不然:退出時(或不輸入)循環條件等於字符串「 假 」
條件能夠是任何變量或函數,最終等於字符串」 假 」。須要注意的是:條件是評估兩次,一次取樣前,一次隨機取樣
做用:生成一個額外的採樣器來測量其下測試元素的整體時間;值得注意的是,這個時間包含該控制器範圍內的全部處理時間,而不只僅是採樣器的
Generate parent sample:生成父樣本(不一樣的模式選擇)
include duration of timer and pre-post processors in generated sample:包含時間的計時器和先後處理器生成的示例(不一樣的模式選擇)
對於Jmeter2.3以上的版本,有兩種模式的操做
①.事務採樣器是添加到其下采樣器後面的
②.事務採樣器是做爲其下采樣器的父採樣器
生成的事務採樣器的測量的時間包括其下采樣器以及其餘的一切時間。因爲時鐘頻率問題,這個時間可能略大於單個採樣器的時間之和;
時鐘開始時間介於控制器記錄開始時間與第一個採樣器開始之間,時鐘結束時間亦然。
事務採樣器只有在其子採樣器都成功的狀況下才顯示成功。
在父模式下,事務控制器下的各個採樣器只有在結果樹裏才能看到;同時,子採樣器的數據也不會在CSV文件中顯示,可是在XML文件中能夠看到。
做用:交替控制,使得該控制器包含的取樣器步驟交錯執行在每一個循環中
忽略子控制器模塊(Ignore sub-contorller blocks):若是勾選此項,交錯控制器將sub-controllers像單一請求元素同樣,一次只容許一個請求/控制器
使用方法:假使該控制器下有2個取樣器A和B,交替執行A和B2個請求,即每次傳遞一個子請求到這個測試,按子元件的排列順序
做用:在多線程循環的時候,將使其子節點下的取樣器請求只運行一次
做用:jmeter自帶的翻譯這裏是錯誤的,由於它並不能控制吞吐量(吞吐量的概念請自行百度);其實質做用是容許用戶控制執行的頻率
總共有兩種執行模式:百分比執行和總執行
總執行(Total Executions):使控制器中止執行必定數量的測試計劃
百分比執行(Percent Executions):使控制器按必定比例執行迭代的測試計劃
流量(Throughput):對應上面的執行數量或者比例
每一個用戶(Per User):每一個用戶,若是勾選此項,將致使控制器計算是否應該執行在每一個用戶(每一個線程)的基礎上;若是不加以控制,那麼將計算全球全部用戶。
做用:容許用戶控制該控制器下面的取樣器/控制器是否執行該節點下的子節點;
條件(默認JavaScript)(Condition(default javascript)):使用JavaScript的函數或變量進行評估判斷條件爲真或假
條件解釋爲變量表達式(interpret condition as variable expression):若是勾選該項,那麼變量表達式會進行求值,並與「ture」或「false」進行比較,而無需使用JavaScript
對全部子條件執行(evaluate for all children):若是勾選該項,則該controller在沒一個子節點執行時執行一次;
默認狀況下,該控制器能夠對包含在其下面的全部可運行的元素進行執行,但只在入口執行一次
做用:相似代理服務器的做用,在測試執行期間記錄測試樣本
清除全部記錄的樣本(Clear all the recorded samples):點擊能夠清除全部已經記錄的測試樣本
通常狀況下,在測試執行時候,它沒有效果,可是在執行HTTPS測試腳本時,會記錄下全部測試樣本
做用:該控制器下的取樣器請求能夠循環運行
循環次數(Loop Count):在輸入框中輸入須要循環的次數,控制器下的請求便可循環運行
永遠(forever):若是勾選該項,那麼控制器下的請求可一直運行
做用:測試控制器子節點下的某一個模塊,而不是整個測試計劃
尋找目標元素(Find target element):尋找測試計劃中須要特定測試的元素,模塊;也可理解爲該控制器能夠控制已經封裝好的模塊元素
做用:用來組合取樣器和其餘邏輯控制器
簡單控制器是最基本的控制器,對jmeter測試運行沒有任何影響,可用來命名某些操做
做用:相似交替控制器,但該控制器隨機選取某一個取樣器請求並執行
忽略子控制器模塊(Ignore sub-controller blocks):若是勾選此項,交錯控制器將sub-controllers像單一請求元素同樣,一次只容許一個請求/控制器
做用:相似於簡單控制器,將執行每一個子節點下的取樣器請求一次,可是執行是隨機的
JMeter配置元件能夠用來初始化默認值和變量,以便後續採樣器使用。將在其做用域的初始化階段處理。
注意:CSV Dataset變量在每次測試循環的初始階段定義,因爲定義發生在配置處理完成以後,因此他們不能用於一些配置元件(如JDBC Config),以便在配置時處理他們的內容。可在HTTP Auth Manager中正常使用。
默認,jmete0072編程發送出的每一個請求是不間斷的。咱們經過添加一個定時器到線程組來指定延遲時間。若是不添加延時,jmeter可能在較短的時間內發送大量的請求導致服務器癱瘓。
一、定時器是在每一個sampler(採樣器)以前執行的,而不是以後(不管定時器位置在sampler以前仍是下面);
二、當執行一個sampler以前時,全部當前做用域內的定時器都會被執行;
三、若是但願定時器僅應用於其中一個sampler,則把定時器做爲子節點加入;
四、若是但願在sampler執行完以後再等待,則可使用Test Action;
若是你須要讓每一個線程在請求以前按相同的指定時間停頓,那麼可使用這個定時器;須要注意的是,固定定時器的延時不會計入單個sampler的響應時間,但會計入事務控制器的時間。
對於「java請求」這個sampler來講,定時器至關於loadrunner中的pacing(兩次迭代之間的間隔時間);
對於「事務控制器」來講,定時器至關於loadrunner中的think time(思考時間:實際操做中,模擬真實用戶在操做過程當中的等待時間)。
咱們一般說的響應時間,應該大部分狀況下是針對某一個具體的sampler(http請求),而不是針對一組sampler組合的事務 。
如須要每一個線程在請求前按隨機時間停頓,那麼使用這個定時器,上圖表示暫停時間會分佈在100到400之間,計算公式參考:Math.abs((this.random.nextGaussian() * 300) + 100)
和高斯隨機定時器的做用差別不大,區別在於延時時間在指定範圍內且每一個時間的取值機率相同,每一個時間間隔都有相同的機率發生,總的延遲時間就是隨機值和偏移值之和。
下面表示的是隨機延遲時間的最大值是100毫秒:
(1)Random Delay Maximum(in milliseconds):隨機延遲時間的最大毫秒數
(2)Constant Delay Offset(in milliseconds):暫停的毫秒數減去隨機延遲的毫秒數
可讓JMeter以指定數字的吞吐量(即指定TPS,只是這裏要求指定每分鐘的執行數,而不是每秒)執行。
吞吐量計算的範圍能夠爲指定爲當前線程、當前線程組、全部線程組等範圍,而且計算吞吐量的依據能夠是最近一次線程的執行時延。這種定時器在特定的場景下,仍是頗有用的。
這個定時器和loadrunner當中的集合點(rendezvous point)做用類似,其做用是:阻塞線程,直到指定的線程數量到達後,再一塊兒釋放,能夠瞬間產生很大的壓力.
(1)Number of Simulated Users to Group by:模擬用戶的數量,即指定同時釋放的線程數數量
(2)Timeout in milliseconds:超時時間,即超時多少毫秒後同時釋放指定的線程數。
這個定時器,通常狀況下用不到,但它能夠說是最強大的,由於能夠本身變成實現想要作的任何事情,例如:但願在每一個線程執行完等待一下,或者但願在某個變量達到指定值的時候等待一下。
這個定時器在每一個線程請求以前按隨機的時間停頓,大部分的時間間隔出如今一個特定的值,總的延遲就是泊松分佈值和偏移值之和。
上面表示暫停時間會分佈在100到400毫秒之間:
(1)Lambda(in milliseconds):蘭布達值
(2)Constant Delay Offset(in milliseconds):暫停的毫秒數減去隨機延遲的毫秒數
在jemter最新的版本中,新增了這個定時器,能夠這麼理解,這個定時器至關於BeanShell定時器的「父集」,它可使用java、JavaScript、beanshell等多種語言去實現你但願完成的事情;
6.10 BSF定時器(BSF Timer)
BSF Timer,也是jmeter新的版本中新增的定時器,其使用方法和JSR223 Timer很類似,只須要在jmeter的lib文件夾導入其jar包,就能夠支持腳本語言直接訪問Java對象和方法的必定時器。有了它 , 你就能在java application中使用javascript, Python, XSLT, Perl, tcl, ……等一大堆scripting language. 反過來也能夠;就是在這些scripting language中調用任何已經註冊過了的JavaBean,java object。它提供了完整的API實現經過Java訪問腳本語言的引擎。
設置預期結果,查看返回的實際結果與預期結果是否一致。
BeanShell以前關於定時器的隨筆中有介紹過,是一種鬆散類型的腳本語言(這點和JS相似),一種徹底符合java語法的java腳本語言,而且又擁有本身的一些語法和方法;
做用對象:針對sampler中的Bean Shell sampler而使用的斷言
Name:斷言的名字(能夠用一個比較容易理解和分辨的名稱)
Comments:註釋(對這個斷言進行一個解釋,備註)
Reset bsh.interpreter before each call:在每次調用Bean Shell以前重置bsh.interpreter類(bsh.interpreter是Bean Shell腳本語言的一種類,也能夠理解爲一種解析器)
Parameters(String Parameters and String []bsh.args):String參數(String []bsh.args是主類main函數的形式參數,是一個String 對象數組,能夠用來獲取命令行用戶輸入進去的參數)
Script file:腳本文件(能夠填入腳本文件路徑)
Script(see below for variables that are defined):參照下文定義的變量(使腳本文件參照定義的變量來運行)
BSF(Bean Scripting Framework)以前也介紹過,是一個支持在Java應用程序內調用腳本語言 (Script),而且支持腳本語言直接訪問Java對象和方法的一個開源項目;
做用對象:針對sampler中的BSF sampler而使用的斷言
Script language(e.g.beanshell,javascirpt,jexl):腳本語言(能夠從下面的下拉框中選擇對應的腳本語言JavaScript、beanshell等)
parameters to be passed to script(=> String Parameters and String []args):(傳遞給腳本的參數→能夠理解爲使用BSF斷言腳本時候一塊兒引用的參數 )
Script file(overrides script):重寫腳本(能夠經過選擇腳本文件的狀態,是瀏覽調用已有的腳本仍是在在下方的輸入框內寫入腳本;)
Script:下面的輸入框表示能夠輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日誌文件等參數)
這是一種比較特殊的斷言元件,針對斷言進行字符串替換時使用;
做用對象:須要替換的字符串
Select Comparison Operators:選擇比較運算符
Compare Content:能夠選擇比較的內容類型(true/false或者自定義,編輯)
Compare Time:比較時間(能夠設定比較的時間,單位爲秒,默認爲-1)
Comparison Fitters:比較修改工具
regular expression substitutions:替換正則表達式
Regex String:要替換的字符串(可從斷言結果中選擇)
substitutions:替換的字符串(替換結果)
對響應類爲XML類型的文件進行斷言;
做用對象:針對sampler中的SOAP/XML-RPC Request而使用的斷言
Tidy Settings:Tidy 環境(Tidy是一個HTML語法檢查器和打印工具,能夠將HTML轉換爲XML類型的文件)
Doctype:文檔類型(可經過下拉框選擇不一樣文檔類型→ omit疏忽遺漏的/auto動態的/strict嚴格的/loose寬泛的。。。。。。我也不太懂這裏什麼意思GG)
Format:文件格式(可選擇HTML/XHTML/XML三種不一樣類型的文件格式來檢查返回內容)
Errors only:偏差校訂(能接受的最大值)
Error threshold:偏差/錯誤範圍(可選擇偏差/錯誤數量的範圍,最大值)
Warning threshold:警告範圍(可選擇偏差警告的數量範圍,最大值)
若是勾選「Error only」這裏忽略Warning,只對偏差做統計檢查;若是對返回內容的檢查結果不超過指定結果,則斷言經過,不然失敗。
Write JTidy report to file:寫入JTidy報告的文件(JTidy是Tidy的一個java移植,能夠將它當成一個處理HTML文件的DOM解析器)
JSR223即Java 規範請求,是指向JCP(Java Community Process)提出新增一個標準化技術規範的正式請求;
做用對象:針對sampler中的JSR223 sampler而使用的斷言
Script language(e.g.beanshell,javascirpt,jexl):腳本語言(能夠從下面的下拉框中選擇對應的腳本語言JavaScript、beanshell等)
parameters to be passed to script(=> String Parameters and String []args):(傳遞給腳本的參數→能夠理解爲使用JSR223斷言腳本時候一塊兒引用的參數 )
Script file(overrides script):重寫腳本(能夠經過選擇腳本文件的狀態,是瀏覽調用已有的腳本仍是在在下方的輸入框內寫入腳本;)
Script:下面的輸入框表示能夠輸入變量類型,運用的腳本(取樣結果、斷言結果、取樣日誌文件等參數)
MD5是一種消息摘要算法,用以提供消息的完整性保護(具體關於MD5的知識請自行查詢);
做用對象:針對參數類型爲MD5Hex加密的參數的斷言
MD5Hex:將已被MD5加密的參數寫入其中,添加取樣器等其餘元件
用於判斷返回內容的大小;
做用對象:返回信息,響應報文
APPly to:應用範圍(返回內容的斷言範圍)
Main sample and sub-samples:做用於父節點取樣器及對應子節點取樣器
Main sample only:僅做用於父節點取樣器
Sub-samples only:僅做用於子節點取樣器
JMeter Variable:做用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
Response Size Field to Test:響應字節的測試範圍(能夠選擇用於判斷的響應範圍)
Full Response:所有響應
Response Headers:響應頭部
Response Body:響應主體
響應代碼:響應報文相關的代碼
響應信息:響應報文的信息
Size to Assert:斷言字節範圍
字節大小單位爲:字節;比較順序是①返回內容的大小②比較類型③指定字節大小
SMIME是一種多用途網際郵件擴充協議,相比於以前的SMAP郵件傳輸協議,增長了安全性,對郵件主題進行保護;
做用對象:針對採用了該種郵件傳輸協議的信息
signature:簽名(可選擇對協議的簽名驗證狀態)
Verify signature:驗證簽名
Message not signed:沒有簽名消息
Signer certificate:簽名證書(由於SMIME協議增長了安全傳輸,須要證書驗證)
No check:不檢查
Check values:檢查
Signer distinguished name:簽名證書者名稱(證書註冊者的名稱)
Sigmer email address:簽名者的郵件地址(註冊的郵件地址)
Issuer distinguished name:發行者名稱(由誰發行的證書)
Serial Number:證書序號
Certificate file:選擇證書文件
Execute assertion message at position:執行斷言消息的位置(在返回消息的具體哪一個位置執行斷言)
亦能夠稱爲XML模型斷言/XML數據類型斷言;XML Schema 定義了兩種主要的數據類型:①xml document schema 文檔架構 ;② 文檔架構xml-schema xml模式
做用對象:返回結果爲XML概要斷言的2中數據類型的消息
XML Schema:XML概要模型
File Name:文件名(寫入須要斷言的文件名稱)
XML(可擴展標記語言) 提供一種描述結構化數據的方法。與主要用於控制數據的顯示和外觀的 HTML 標記不一樣,XML 標記用於定義數據自己的結構和數據類型;
做用對象:判斷返回結果是否和xml的格式即<></>成對出現
XPath即爲XML路徑語言,它是一種用來肯定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。
做用對象:針對返回信息爲XPAth的數據類型進行斷言
Apply to:適用範圍
Main sample and sub-samples:主要樣本和次級樣本
Main sample only:僅主要樣本
Sub-samples only:僅次級樣本
JMeter Variable:jmeter變量(輸入框內可輸入jmeter的變量名稱)
XML Parsing Options:XML解析選項
Use Tidy(tolerant parser):使用Tidy(容錯解析器),默認選擇quiet(不顯示)
Quiet:不顯示
Report errors:錯誤報告
Show warnings:顯示錯誤
Use Namespaces:使用名稱空間
Validate XML:驗證XML(文件包/數據)
Ignore Whitespace:忽略空格(這容許你指定語法分析器能夠忽略哪一個空格,而哪一個空格是重要的)
Fetch external DTDs:獲取外部DTDs(一些XML元素具備屬性,屬性包含應用程序使用的信息,屬性僅在程序對元素進行讀、寫操做時,提供元素的額外信息,這時候須要在DTDs中聲明)
XPath Assertion:輸入框中寫入xpath斷言,點擊Validate驗證其正確性
True if nothing matches:確認都不匹配
判斷返回內容中的內容
做用對象:響應報文中的全部對象
APPly to:適用範圍
Main sample and sub-samples:做用於父節點取樣器及對應子節點取樣器
Main sample only:僅做用於父節點取樣器
Sub-samples only:僅做用於子節點取樣器
JMeter Variable:做用於jmeter變量(輸入框內可輸入jmeter的變量名稱)
要測試的響應字段:要檢查的項
響應報文
Documeng(text):測試文件
URL樣本
響應代碼
響應信息
Response Headers:響應頭部
Ignore status:忽略返回的響應報文狀態碼
模式匹配規則:
包括:返回結果包括你指定的內容
匹配:(好像跟Equals查很少,弄不明白有什麼區別)
Equals:返回結果與你指定結果一致
Substring:返回結果是指定結果的字串
否:不進行匹配
要測試的模式:即填寫你指定的結果(可填寫多個),按鈕【添加】、【刪除】是進行指定內容的管理
用於判斷服務器的響應時間
做用對象:服務器
APPly to:適用範圍
Main sample and sub-samples:做用於父節點取樣器及對應子節點取樣器
Main sample only:僅做用於父節點取樣器
Sub-samples only:僅做用於子節點取樣器
Duration to assert:持續斷言
Duration in milliseconds:響應時間設置(單位:毫秒),若是響應時間大於設置的響應時間,則斷言失敗,不然成功。
前置處理器在取樣器請求前執行一些操做。若是前置處理器附有取樣器元件,那麼它將先於這個取樣器元件執行。
後置處理器在取樣器請求後執行一些操做。若是後置處理器附有取樣器元件,它將在取樣器元件運行以後運行。
在jmeter中,經過監聽器組件來提供查看、保存、和讀取已保存的測試結果功能。
默認狀況下,測試結果將被存儲爲xml格式的文件。另一種存儲格式爲CSV文件,該格式的好處就是效率更高,但存儲的信息不如xml格式詳細。
一般狀況下,監聽器有如下四種類型:
樹(tree)表(table)圖形日誌文件
查看請求結果,經過的測試一般爲綠色。紅色則表明失敗。查看對應Sampler的測試結果的請求、響應數據。
樣本數目:是總共發送到服務器的請求數。
最新樣本:是表明時間的數字,是服務器響應最後一個請求的時間。
吞吐量:是服務器每分鐘處理的請求數。
平均值:是總運行時間除以發送到服務器的請求數。
中間值:是表明時間的數字,有一半的服務器響應時間低於該值而另外一半高於該值。
偏離:表示服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分佈。
#Samples:表示你此次測試中一共發出了多少個請求,若是模擬10個用戶,每一個用戶迭代10次,那麼這裏顯示100
Average:平均響應時間——默認狀況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也能夠以Transaction 爲單位顯示平均響應時間
Median:中位數,也就是 50% 用戶的響應時間
90% Line:90% 用戶的響應時間
Note:關於 50% 和 90% 併發用戶數的含義,
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量——默認狀況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也能夠表示相似 LoadRunner 的 Transaction per Second 數
KB/Sec:每秒從服務器端接收到的數據量,至關於LoadRunner中的Throughput/Sec
Http請求+查看結果樹
代理服務器操做步驟
建立一個線程組(右鍵點擊「測試計劃」--->「添加」---->「線程組」)
建立一個http代理服務器(右鍵點擊「工做臺」--->「添加」--->「非測試元件」--->「http代理服務器」)
Tip HTTP服務器代理設置——分組詳解
l 不對樣本分組:全部請求所有羅列
l 在組間添加分隔:加入一個虛擬的以分割線命名的動做。
l 每一個組放入一個新的控制器:執行時按控制器給輸出結果
l 只存儲每一個組的第一個樣本:保存對於一次url請求。
設置完後要啓動代理服務器,錄製完成後記得關閉,
IE--->「internet屬性」--->「鏈接」--->「局域網設置」
在瀏覽器裏對指定的頁面進行訪問。錄製完成後,把瀏覽器的代理服務器勾去掉。
Badboy是一個強大的工具,旨在幫助測試和開發複雜的動態應用。Badboy包括一個簡單而全面的捕獲/回放界面,強大的負載測試的支持,詳細的報告圖表等等,從而使Web測試和開發變得更加容易. 腳本錄製完成後,導出爲 Export to Jmeter。
1.測試需求:測試20個用戶訪問連接在負載達到30 QPS時的平均響應時間。
2.測試步驟:
線程組主要包含三個參數:線程數、準備時長(Ramp-Up Period(in seconds))、循環次數。
線程數:虛擬用戶數。一個虛擬用戶佔用一個進程或線程。設置多少虛擬用戶數在這裏也就是設置多少個線程數。
準備時長(單位爲s):設置的虛擬用戶數須要多長時間所有啓動。若是線程數爲20 ,準備時長爲10 ,那麼須要10秒鐘啓動20個線程。也就是每秒鐘啓動2個線程。
循環次數:每一個線程發送請求的次數。若是線程數爲20 ,循環次數爲5,那麼每一個線程發送5次請求。總請求數爲20*5=100 。若是勾選「永遠」,那麼全部線程會一直髮送請求,一到選擇中止運行腳本。
第二步:增添HTTP請求
Jmeter提供了一個很是有用的定時器,稱爲Constant Throughput Timer (常數吞吐量定時器),該定時器能夠方便地控制給定的取樣器發送請求的吞吐量。
Constant Throughput Timer 的主要屬性介紹:
Target throughput(in samples per minute):目標吞吐量。注意這裏是每分鐘發送的請求數,所以,對應測試需求中所要求的20 QPS ,這裏的值應該是1200 。
This thread only :控制每一個線程的吞吐量,選擇這種模式時,總的吞吐量爲設的 target Throughput 乘以線程的數量。
All active threads : 設置的target Throughput 將分配在每一個活躍線程上,每一個活躍線程在上一次運行結束後等待合理的時間後再次運行。活躍線程指同一時刻同時運行的線程。
All active threads in current thread group :設置的target Throughput將分配在當前線程 組的每個活躍線程上,當測試計劃中只有一個線程組時,該選項和All active threads選項的效果徹底相同。
All active threads (shared ):與All active threads 的選項基本相同,惟一的區別是,每一個活躍線程都會在全部活躍線程上一次運行結束後等待合理的時間後再次運行。All cative threads in current thread group (shared ):與 All active threads in current thread group 基本相同,惟一的區別是,每一個活躍線程都會在全部活躍線程的上 一次運行結束後等待合理的時間後再次運行。
腳本的主要部分設置完成後,須要經過某種方式得到性能測試中的測試結果,在本例中,咱們關心的是請求的響應時間。
Jmeter 中使用監聽器元件收集取樣器記錄的數據並以可視化的方式來呈現。Jmeter有各類不一樣的監聽器類型,由於上HTTP請求,咱們可在添加聚合報告,更爲直觀的查看測試結果。
添加聚合報告,右鍵點擊線程組,在彈的菜單(添加--->監聽器--->聚合報告)中選擇聚合報告。
添加查看結果樹 (添加--->監聽器--->查看結果樹)
第五步:運行腳本
將上面設置好的線程保存到桌面,點擊執行
第六步:聚合報告分析
#Samples:表示你此次測試中一共發出了多少個請求,若是模擬10個用戶,每一個用戶迭代10次,那麼這裏顯示100
Average:平均響應時間——默認狀況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,也能夠以Transaction 爲單位顯示平均響應時間
Median:中位數,也就是 50% 用戶的響應時間
90% Line:90% 用戶的響應時間
Note:關於 50% 和 90% 併發用戶數的含義,
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量——默認狀況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也能夠表示相似 LoadRunner 的 Transaction per Second 數
KB/Sec:每秒從服務器端接收到的數據量,至關於LoadRunner中的Throughput/Sec
響應時間單位:毫秒
4、其餘:
他們是http協議的2種不一樣實現方式。Get是指server從Request URL取得所需參數。從result中的request中能夠看到,get能夠看到參數,可是post是主動向server發送參數,因此通常看不到這些參數的。
__Random,__threadNum,__CSVRead,__StringFromFile,具體調用方法以下:
${__Random(,,)},$,${__CSVRead(,)},${__StringFromFile(,,,)}。
參看Jmeter函數的使用,經過菜單「選項」->「函數助手對話框」,便可在「函數助手」彈出框上找到Jmeter的函數。
其中${__Random(,,)}方法的第一個參數爲隨機數的下限,第二個參數爲隨機數的上限,第三個參數爲儲存隨機數的變量名;${__CSVRead(,)}方法中第一個參數是文件名,第二個參數是文件中的列(列數從0開始);${__StringFromFile(,,,)}方法中第一個參數是文件名,${__StringFromFile(,,,)}方法中沒有指定讀取文件中的哪一列的參數,因此${__StringFromFile(,,,)}只能讀取包含一列的文件。
添加「配置元件」->「用戶定義的變量」。「名稱」中輸入變量名稱,此處以登陸爲例,定義兩個變量username和password。「值」中能夠直接輸入值,也能夠經過Jmeter的函數__CSVRead,__StringFromFile從csv或dat文件中讀取,還能夠經過前綴加隨機數的方法設置參數。
當參數值是某個前綴加一個數字時,能夠用前綴名加${__Random(,,)}或$的方法設置參數值。如進行登陸測試以前,先準備了用戶名爲perf_0到perf_1000的用戶,那麼用戶名就能夠設爲perf_{__Random(0,1000,)}。
當參數值沒有規律的且量不太大時,能夠經過${__CSVRead(,)},${__StringFromFile(,,,)}從文件中讀取,如將用戶名和密碼保存在user.csv文件中,user.csv的內容以下:
oriana,123456
admin,admin
dandan,123456
由於user.csv文件中有兩列數據,因此只能用${__CSVRead(,)}函數,username參數後的值設爲${__CSVRead(user.csv,0)},password參數後的值設爲${__CSVRead(user.csv,1)}。
當參數的值沒有規律且量不太大時,能夠用這種方法。
3.1 建立一個csv文件,內容爲參數的值集,每個參數佔一列,第一行就開始寫參數值,不要寫參數名
3.2在測試計劃或線程組中添加一個「配置元件」->「CSV Data Set Config」
3.3 Filename中填寫步驟2.1中csv文件的完整路徑(當csv文件在bin目錄下時,只需給出文件名便可)
3.4 Virable Names中填寫變量名,若是csv文件中有多個變量,則用逗號隔開
當參數的值沒有規律且量比較大時,能夠選用這種方法。
4.1 添加「配置元件」->「JDBC Connection Configuration」,設置下列參數:
Database URL:jdbc:mysql://host:port/db(如jdbc:mysql://localhost:3306/testlink
JDBC Driver class:com.mysql.jdbc.Driver
username:鏈接數據庫的用戶名(如root)
password:鏈接數據庫的密碼
4.2 添加「Sampler」->「JDBC Request」,在SQL Query中輸入查詢語句,以下:
SELECT CONCAT (「[",
GROUP_CONCAT(
CONCAT("{username:'",login,"'"),
CONCAT("{password:'",password),"'}"),"]「) AS json FROM users
4.3 在JDBC請求中添加「後置處理器」->「正則表達式提取器」,以提取3.4中的用戶名和密碼爲例設置正則表達式提取器的參數:
引用名稱:user
正則表達式:username:’(.+?)’\{password:’(.+?)’
模板:$1$$2$
使用時,user_g1即爲用戶名,user_g2即爲對應用戶名的密碼;更多正則表達式提取方法參見Jmeter正則表達式提取器
其餘:
一、參數設置的三種方式:
paramenters:
body data:
files upload:
指定參數的格式,須要在HTTP信息頭管理器中添加參數類型
http頭部content-type與數據格式:
text/plain:ajax默認方式,將文件設置爲純文本的形式,瀏覽器在獲取到這種文件時並不會對其進行處理(最原始的流)
application/x-www-form-urlencoded : form表單默認的方式,在$.ajax中若是未設置contentType默認也會以這種方式, 在servlet中的把對應的key、value進行相應的處理添加到Map中,全部才能經過request.getParameter()獲取,在servlet中的request.getParameter()只能取到 在url 後面的參數與 這種方式提交的數據
multipart/form-data :多用於文件上傳,html5伴隨出現的formdata 也正用於此(支持普通表單、文件上傳,如果傳文件則服務器採用特有formdata的解析方式),傳遞的時候經過流的形式,數據包的格式也有所不一樣
application/json :這是如今比較經常使用的方式,在發送數據以前需格式化數據JSON.stringify(),確保格式的正確性,服務器解析方式和上面第二種同樣,先獲取json字符串在轉爲JSON對象;