目錄
一、性能測試簡介
二、性能測試指標?
三、性能測試的流程?
四、Jmeter簡介
五、Jmeter常見測試框架
六、Jmeter錄制腳本?
七、腳本增強?
八、Jmeter腳本參數化?
九、斷言?
十、關聯?
十一、JDBC請求?
十二、分布式測試?
十三、性能測試報告
一、性能測試簡介
性能測試:通過性能測試工具(Jmeter,Loadrunner),通過特定方式對系統施加一定壓力(正常場景、異常負載以及峰值條件來實施壓力,得到各項性能指標來保證系統的性能需求)。
性能測試原理:基于協議,用工具模擬實際操作(發送多個請求),并且收集數據生成報告。
性能測試的目的:
- 評估系統的能力;
- 識別系統的弱點(瓶頸);
- 檢查系統的隱藏問題;
- 保證系統的穩定性和可靠性;
- 在保證用戶體驗感的同時節省資源;
性能測試一般在功能測試的中后期進行,性能測試是依賴于功能測試的。
性能測試一般要有獨立的測試環境,并且測試環境要進行用戶數據初始化。
前期的網絡測試能在局域網中進行,網絡影響小。
二、性能測試指標?
- 響應時間:指的是從客戶端發送請求開始到收到服務的響應且看到響應內容為止的時間段,響應時間=網絡傳輸時間+服務器處理時間+瀏覽器解析呈現時間;
- 用戶數:在線數:在軟件上不一定操作,并發數:在軟件上且在操作(特定時間或時段);
- 資源利用率:常見資源有CPU、內存、磁盤、網絡帶寬;
- 吞吐量:處理數據總量;
- 吞吐率:單位時間內處理的數據量;
- 點擊量:點擊的數量;
- 點擊率:單位時間內點擊的次數;
軟件的性能是否達標是依據用戶的性能需求。
三、性能測試的流程?
- 分析用戶的性能需求,確定性能指標;
- 制定性能測試方案,設計性能測試的場景;
- 根據性能測試場景準備腳本,調試腳本,優化腳本,確保腳本能夠保證性能測試的需求;
- 執行測試腳本;
- 收集性能測試指標數據,與需求進行比對,性能調優,回歸測試;
- 生成測試報告。
四、Jmeter簡介
Jmeter是基于Java語言開發的開源測試工具:輕量級測試工具(與LoadRunner比較);
常用場景:
- 壓力測試:常用于web系統,可以錄制教本、參數化、斷言、關聯以及操作數據庫
- 接口測試:http腳本(get,post),加cookie,加header、加權限認證以及上傳文件等
支持多種協議(web協議、webService、通過JDBC連接數據庫、FTP等)。
Jmeter的特性優點:
- 免費的開源軟件;
- 簡單且直觀的圖形用戶界面;
- Jmeter中負載和性能測試許多不同的服務器類型(HTTP、HTTPS,SOAP等)
- 獨立于平臺的工具;
- 擁有完整的Swing和輕量級組件支持;
- 擁有完整的多線程框架;
- 高度可拓展;
- 用于執行應用程序的自動化測試和功能測試。
Jmeter的組成部分:
- 負載發生器:用于產生負載(發送請求),多進程(線程)模擬用戶行為;
- 用戶運行器:腳本運行的引擎,附加在進程或線程之上的;
- 資源生成器:生成測試過程中服務器的資源數據(收集測試數據);
- 報表生成器:根據測試中獲取的數據生成報表,提供可視化的數據顯示方式;
Jmeter常見概念:
- 測試計劃:描述一個性能測試包含本次測試的所有相關功能;
- 線程組:一般一個線程組可看作一個虛擬用戶組,其中每個線程為一個虛擬用戶;
- 取樣器:測試對象以及測試內容,是基于線程的,Jmeter支持多種取樣(Jmeter支持多種協議);
- 監聽器:對測試結果進行處理和可視化展示的一系列組件,常見的有圖形結果、查看結果樹,聚合報告、表格結果等;
- 控制器:驅動處理一個測試,有邏輯控制器和取樣控制器;
- 配置元件:用于提供對靜態數據配置的支持;
- 定時器:用于在操作之間設置等待時間;
- QPS:每秒請求數(防止惡意刷取,增加項目負載)
- 斷言:用于檢查測試中得到的響應數據是否符合預期;
- 前置處理器:用于在實際請求發出之前對即將發出的請求進行特殊處理;
- 后置處理器:用于對Sampler發出請求后得到的服務器響應進行處理,一般用于提取響應中的特定數據。
五、Jmeter常見測試框架
測試計劃:只要啟動Jmeter就會默認生成一個測試計劃,這個計劃包含了本次測試的相關功能。
線程(用戶):線程組:主線程組,核心,需要進行性能測試的內容(不可省略);
? ? ? ? ? ? ? ? ? ? ? ? setup 線程組:初始化的內容(可省略),若存在則最先運行;
? ? ? ? ? ? ? ? ? ? ? ? teardown線程組:收尾的內容(可省略);
線程屬性:
- 線程數(用戶數)
- Ramp-up: 虛擬用戶啟動時間,用戶開始發請求的時間;
- 循環次數:具體的次數,或者永遠(必須加調度器有持續時間,否則無法結束),當同時設置了次數并且添加調度器時間,以設置次數為準。
取樣器:測試對象及測試內容,基于線程的,即要模擬的動作
? ? ? ? ? ? ? 常用http請求:協議、服務器IP、端口號、方法、url地址、編碼方式
監聽器:用來查看測試結果,圖形化顯示,常用的有查看結果樹(同時查看請求和響應信息,綠色表示測試地址通常,不代表測試case成功,紅色代表異常)、聚合報告(匯總請求發送情況)、圖形結果(圖形化展示)、表格形式展示(可以查看啟動時間)。
Jmeter支持多個請求同時發送,支持多協議、多請求同時并發。
在聚合報告中,時間是以ms為單位的;
在匯總報告中,標準偏差體現穩定性的,表示離散程度,越小約好。
六、Jmeter錄制腳本?
1、http代理服務器設置(在Jmeter中完成);
添加http代理服務器(腳本記錄器),再添加線程組,將目標控制器選為如圖所示,端口默認是8888:
2、瀏覽器的設置;
在internet選項的連接中將局域網設置為如下:
在Jmeter的腳本記錄器中啟動,之后在瀏覽器中進行相關操作,就會錄制:
七、腳本增強?
tps:每秒事務處理量(每秒處理的消息數),表達系統處理能力的性能指標;
集合點:一般用來測試瞬間的并發能力;
思考時間:一般是用來模擬用戶的真實行為(用戶在頁面的停留時間),讓每個用戶的操作有一定差異,有了思考時間會減少服務器堆積的情景時間;
事務通過控制器來體現。
在Jmeter中通過定時器來實現集合點和思考時間。
集合點使用同步定時器,能夠實現真正的并發(先到的線程在集合點等后到的,等到期了就一起走),適用場景:秒殺、限購、搶票等。
注意:設置集合的模擬虛擬用戶數不能大于線程數,否則會一直等待。
集合虛擬用戶數小于線程組中的用戶數,表示分批次集合,最后一批有可能不夠集合的數目,必須要設置等待時間。
集合虛擬用戶數等于線程組中的用戶數,表示所有虛擬用戶必須全部到達集合點,才一起開始下一個動作。如果模擬用戶數量設置為0表示全部用戶都參與集合。超時時間設置為0,當最后一批無法達到集合數量時將一直等待,等待到系統的最大值才釋放。
對于思考時間常用的是固定計時器和高斯隨機定時器;
固定計時器:固定停留(間隔),上下請求發出的時間間隔是固定的;
高斯隨即定時器:隨機停留(間隔),每個虛擬在請求前都是按照隨機事件間隔停留。
注意:在設置定時器時,固定偏移量和隨機偏移量不要同時設置,否則以固定偏移量為準。
八、Jmeter腳本參數化?
參數化的作用:讓數據變得不一樣,模擬每個線程(虛擬用戶)的數據不一樣,就進行參數化。
參數化實現的步驟:
- 判斷哪些參數需要實現參數化;
- 設置參數:新建變量(定義名稱),準備參數的值;
- 用參數代替需要參數化的數據(替換形式:${xx});
用戶定義的變量:自定義變量,適用于ip或者歡迎詞等只有一個參數值的數據,但是這個值可以變化;
配置原件 -> 用戶定義的變量。
前置處理器中的用戶參數:在請求發出之前,對請求的參數進行處理;
迭代:需要執行驗證的操作再執行一次。
線程數表示使用的用戶數;
特點:指定了用戶和參數的關系,適用于數量比較少的參數化操作,用戶和參數有特定關系。
配置原件中的CSV數據文件設置:必須先準備好參數文件是.csv文件格式或者.bat文件格式。
使用范圍:大批量用戶參數,并且參數值有一定規律(利用excel表格來準備參數文件)。
當設置的用戶參數數量少于虛擬用戶數時,就會循環重復使用參數。
將excel表格轉換為dat格式時,先保存為txt文本格式,再保存為dat格式,并且在bat文件中鍵和值之間用擁吻逗號分隔。
Tools中的函數助手:使用其中的CSVRead函數。
前提:準備好csv參數文件,注意不要加列表名(參數標題)。
設置csv文件的讀取列號從0開始。
作用域和執行順序:?
作用范圍:處于不同的級別,受控范圍和可控制的范圍是不一樣的,特別是定時器。
當一個定時器只應用于一個請求中,就將定時器作為請求的子節點加入;
當一個定時器同時應用于多個請求時,就將請求跟定時器放在同一個級別。
在Jmeter中,即使集合點放在請求子節點中仍可以實現同步。
在同一個作用域下,執行的順序如下:
配置原件 -> 前置處理器 -> 定時器 -> 取樣器 -> 后置處理器 -> 斷言 -> 監聽器
九、斷言?
作用:用于就檢查測試中得到的響應數據是否符合預期,用于保證性能測試過程中的數據交互與預期一致,主要用于做調試,在進行壓力測試時,斷言可以禁用。
目的:在request的返回層面加一層判斷機制。
實現過程:
- 在請求下添加斷言(一個請求可以添加多個斷言),請求不同,添加的斷言不同;
- 添加一個斷言結果的監聽器,通過斷言結果可以看到是否通過斷言,若通過,斷言結果會打印一次請求的名稱,一個請求的所有斷言都通過了才算請求成功。
Jmeter中的斷言和LoadRunner中的檢查點是一致的。
常用斷言:
響應斷言:判斷返回的內容是否滿足預期;
作用對象:響應報文中的所有對象(響應代碼、響應文本、url等等)
在響應斷言下添加斷言結果:
大小斷言(size斷言):用來判斷返回內容的大小;
作用對象:返回信息,響應報文,添加size斷言,必須指定大小和長度
斷言持續時間:判斷服務器的響應時間是否達到預期;
作用對象:服務器;
BeanShell斷言:與Java語言相結合的斷言,用于驗證腳本。
十、關聯?
在測試過程中需要引用前面的數據,但是數據是經常發生變化的,那么要獲取使用這些數據,就需要使用關聯。
例如:第二個請求需要第一個請求返回數據的結果作為自己的輸入數據,此時就需要使用關聯將這兩個數據對接起來。
具體實現步驟:在第一個請求之后添加后置處理器;
后置處理器的作用:在請求結束之后,處理響應結果的特定數據,提取需要的數據。
在關聯的過程中,會通常使用到正則表達式提取器。
對于Jmeter的參數說明:
引用名稱:下一個請求要引用的參數名稱,比如填寫name時,就需要用${name}進行引用;
正則表達式:
- ():括起來的部分表示要提取的;
- . :匹配任何字符串;
- +:一次或多次;
- ?:在找到第一個匹配項后停止;
模板:用$$引用起來,如果正則表達式中有多個正則表達式,則可以是$2$$3$等等,
匹配數字:0代表隨機取值,1代表全部取值,通常情況下使用0;
缺省值:如果參數沒有取到值,就要給賦給默認值。
常用的正則表達式操作符:
后置處理器中的正則表達式:
十一、JDBC請求?
使用Jmeter通過jdbc請求來操作數據庫。
準備工作:準備數據庫環境(創建表、準備數據)
實現步驟:
1、添加jar包:
- 直接將jar包復制到jmeter的lib目錄(mysql推薦使用)
- 通過Test Plan瀏覽加載(oracle推薦使用)
2、建立連接信息:在測試計劃中,點擊添加配置原件 -> JDBC Connection Configuration
3、添加JDBC請求:
使用結果樹查看響應結果:
十二、分布式測試?
使用場景:在使用Jmeter進行性能測試時,對于高頻大并發的數據單臺電腦可能難以支持就需要進行分布式壓測,即對客戶端的壓力進行分攤,也叫負載均衡。
原理:
- 在使用Jmeter進行測試時,選擇其中一臺作為主控調度機,其余作為執行機;
- 執行時,主控機器會把每個腳本發送到每臺執行機器上,執行機器拿到腳本就開始執行,執行機器不需要啟動GUI界面;
- 執行結束后,執行機器會把結果回傳給主機,主機收集所有的執行機器的測試數據進行匯總;
主控機器:生成腳本,調試腳本,匯總數據;
執行機器:運行腳本,回傳數據給主控數據;
具體實現步驟:
1、執行機器的設置:
- 在執行機上安裝JDK和Jmeter(執行機和主控機的版本必須保持一致);
- 添加環境變量;
- 在啟動bin目錄下的:jmeter-server.bat;
易出現問題:提示無法啟動,請按任意鍵/文件找不到
解決方案:進入apache-jmeter-5.2\bin\jmeter.properties文件,將server.rmi.ssl.disable設置為true,重新啟動jmeter-server.bat,查看命令行窗口顯示則表示啟動成功。
2、主控機器設置:
- 準備測試腳本;
- 修改屬性配置文件:jmeter.properties 文件,修改IP和端口號,在文件中查找remote_hosts,原默認信息是127.0.0.1表示本機,修改host信息:執行機器IP:端口號,執行機器2號IP:端口號,默認端口號是1099,執行時,確保1099未被占用(端口號可以進行自定義)
- 重新啟動jmeter.bat;
- 在jmeter中點擊運行,再點擊遠程啟動,即可開啟分布式測試。
十三、性能測試報告
測試報告的大綱:目的、項目簡介、測試過程、測試結果以及項目總結。
性能測試報告的內容:概述、測試環境、測試目標(性能指標)、測試方法、測試數據分析、測試結論。
注意:在測試數據分析的過程中,必須按照不同的測試場景進行描述。
利用Jmeter生成html的測試報告:
方法一:
選擇添加監聽器中的聚合報告,將聚合報告輸出到指定的csv文件,在jmeter的工具中選擇Generate HTML report;
html報告展示:
方法二:在命令行窗口輸入命令來實現:
操作命令:jmeter -n -t 腳本的絕對路徑.jmx -l 測試報告的文件名稱.csv -e -o html報告的目錄路徑。
注意:報告的目錄文件必須為空目錄,測試報告文件也不能有數據,必須是空文件或者是不存在的文件。