測試計劃
Test Plan (測試計劃):用來描述一個測試,包含與本次測試所有相關的功能,也就是說一個測試的所有內容都是基于一個測試計劃的,一個測試都以一個測試計劃開始,所以要測試,就需要有一個測試計劃,然后在這個測試計劃下再創建和添加其他組件。
打開一個JMeter界面,只能打開一個測試計劃,不能在一個面板上創建多個測試計劃,要打開多個測試計劃,就只能打開多個JMeter界面;
測試計劃面板可以添加“用戶定義變量”和“依賴的庫”等;
Threads Users(線程組):性能測試需要模擬大量用戶的訪問,線程組就是用來完成該工作的,一個線程組可以看做一個虛擬用戶組,線程組中可以設置很多線程,每個線程代表一個虛擬用戶,線程組中設置好的線程數量在測試執行過程中不會發生改變。
做性能測試,設置線程組是必不可少的一步,它是一個測試計劃的基本組成部分;
線程組面板可以設置線程數、多長時間啟動設置的線程數、每個線程執行的次數;
取樣器(Sampler)是性能測試中向服務器發送請求的元件,模擬用戶的一個操作,如果是向服務器發送http請求,那該取樣器可以看做是一個沒有界面的瀏覽器;
JMeter支持多種不同的取樣器Sampler ,如 HTTP Request Sampler 、 FTP Request Sampler 、Java Request Sampler 、JDBC Request Sampler 等,每一種不同類型的取樣器Sampler 可以根據設置的參數向服務器發出不同類型的請求。
取樣器我們可以理解為:與要測試的系統進行交互的一個媒介,就像生活中你要給別人打電話,那你需要一部手機,手機就是媒介;
下面我們分別介紹三種取樣器:Http請求取樣器、JDBC請求取樣器、Java請求取樣器;
用以發送Http請求,請求http接口
用以發送jdbc請求,以jdbc協議請求訪問數據庫
用以發送java請求,測試Java程序,需要基于JMeter測試框架編寫測試用例。
步驟如下:
1) 新建一個普通的Java工程
2) 添加JMeter的包引用,這些包位于 JMeter安裝目錄/lib/ext下,一般只需要ApacheJMeter_core.jar和ApacheJMeter_java.jar這兩個jar依賴。
3) 新建一個Java Class,并繼承“AbstractJavaSamplerClient”,AbstractJavaSamplerClient中默認實現了四個可以覆蓋的方法,分別是“getDefaultParameters”,“setupTest”,“runTest”和“teardownTest”方法。
getDefaultParameters 方法主要用于設置傳入界面的參數;
setupTest方法為初始化方法,用于在執行測試前的一些初始化工作;
runTest方法為性能測試時的線程運行主體,執行的業務都放在該方法中;
teardownTest方法為測試結束方法,可以用來進行一些資源釋放工作;
4) 代碼編寫完畢后,將代碼打成jar包,然后拷貝到JMeter的安裝目錄\lib\ext下,然后啟動JMeter即能在Java請求面板的下拉列表中看到剛才編寫的Java類;
注意:
● 如果你的jar依賴了其他第三方jar,需要將其一起放到\lib\ext下,否則會出現ClassNotFound錯誤;
● 如果將jar放入\lib\ext后,在Java請求面板下依然無法找到編寫的類,通常重啟一下JMeter即可。
監聽器用來收集JMeter的測試結果,JMeter的測試結果由監聽器監聽并記錄下來的,記錄下來的測試結果它能以多種方式展示;
用來展示測試的結果信息
對每個請求,統計它的響應信息并提供請求數,平均值,最大值,最小值,錯誤率,大約吞吐量(以請求數/秒為單位)和以kb/秒為單位的吞吐量。
添加聚合報告是非常重要的,通過聚合報告可以觀察性能測試的平均值情況;
● Label - 請求對應的name屬性值。
● Samples - 具有相同標號的樣本數,總的發出請求數。
● Average - 請求的平均響應時間。
● Median - 50%的樣本都沒有超過這個時間。這個值是指把所有數據按由小到大將其排列,就是排列在第50%的值。
● 90% Line - 90%的樣本都沒有超過這個時間。這個值是指把所有數據按由小到大將其排列,就是排列在第90%的值。
● 95% Line - 95%的樣本都沒有超過這個時間。這個值是指把所有數據按由小到大將其排列,就是排列在第95%的值。
● 99% Line - 99%的樣本都沒有超過這個時間。這個值是指把所有數據按由小到大將其排列,就是排列在第99%的值。
● Min - 最小響應時間。
● Max - 最大響應時間。
● Error % - 本次測試中,有錯誤請求的百分比。
● Throughput - 吞吐量是以每秒/分鐘/小時的請求量來度量的。這里表示每秒完成的請求數。
● Received KB/sec - 收到的千字節每秒的吞吐量測試。
● Sent KB/sec - 發送的千字節每秒的吞吐量測試。
以上數據沒有顯示單位的都為毫秒;
以圖形的方式展示測試的結果,圖表底部參數的含義如下:
樣本數目:總共發送到服務器的請求數。
最新樣本:代表時間的數字,是服務器響應最后一個請求的時間。
吞吐量:服務器每分鐘處理的請求數。
平均值:總運行時間除以發送到服務器的請求數。
中間值:代表時間的數字,有一半的服務器響應時間低于該值而另一半高于該值。
偏離:服務器響應時間變化、離散程度等,換句話說,就是數據的分布。
將數據以表格的形式展示出來;
該組件可以為我們的http請求設置默認的值。比如:我們創建一個測試計劃有很多個請求且都是發送到相同的server,這時我們只需添加一個 Http request defaults組件并設置“Server Name or IP”,然后添加多個http請求且都不用再設置"server name or ip",這些http請求會默認使用Http request defaults組件設置的值。
配置JDBC請求的數據庫連接信息,用來訪問數據庫;
配置Java請求的默認值信息;
對于一個測試計劃中,多次被使用的公共值,可以通過自定義變量為后續JMeter腳本修改帶來很大便利,修改一個變量,其他引用該變量的位置將全部被修改。
JMeter自定義變量,在配置元件下,可以添加用戶定義變量,到時候在腳本的地方直接引用即可,引用方式:${變量名}
執行測試在固定的時間后開始執行;
在性能測試時,為了能模擬真實的用戶請求,我們需要將每次請求發送的參數數據都不一樣,這個過程稱為參數化。
JMeter提供一種函數助手可以幫我們實現這一功能;
函數參數化,通過菜單欄的 options –>函數助手 打開,在打開的對話框中可以有多種函數方式;
我們介紹一種csvread 的方式,通過讀取一個csv的文件,也就是一個txt文件來實現參數值的變化;
上面一行添加我們的txt文件及路徑,txt文件里面兩個值逗號分開即可,最后通過生成一個變量,把這個參數變量放到你需要的地方,替換原來寫死的內容。