使用jmeter進行壓力測試小結

前言:之前在多臺機器上佈置了docker,然後用nginx做反向代理,現在用jmeter對搭載的nginx服務器進行壓力測試,看看性能如何。

jmeter簡介

JMeter作爲一款廣爲流傳的開源壓測產品,最初被設計用於Web應用測試,如今JMeter可以用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP服務器等等,還能對服務器、網絡或對象模擬巨大的負載,通過不同壓力類別測試它們的強度和分析整體性能。另外,JMeter能夠對應用程序做功能測試和迴歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。爲了最大限度的靈活性,JMeter允許使用正則表達式創建斷言。
JMeter的特點包括對HTTP、FTP服務器、數據庫進行壓力測試和性能測試;完全的可移植性;完全 Swing和輕量組件支持包;完全多線程;緩存和離線分析/回放測試結果;可鏈接的取樣器;具有提供動態輸入到測試的功能;支持腳本編程的取樣器等。在設計階段,JMeter能夠充當HTTP PROXY(代理)來記錄瀏覽器的HTTP請求,也可以記錄Apache等WebServer的log文件來重現HTTP流量,並在測試運行時以此爲依據設置重複次數和併發度(線程數)來進行壓測。

jmeter安裝

1.jmeter主程序
windows下載zip格式就好,解壓就可以使用,進入bin目錄運行jmeter.bat啓動jmeter。
下載地址:http://jmeter.apache.org/download_jmeter.cgi

2.java環境
現在最新的版本是jmeter 5.0了,要求java8或者java9的環境。我下載的是java8,下載地址點擊這裏。上面有各種系統對應的下載文件,如果你的電腦也是windows 64位系統,那麼就下載jdk-8u191-windows-x64.exe這個文件。
安裝完之後,在cmd命令窗口中輸入java -version,出現你安裝的版本信息就成功了。

jmeter使用

這一部分分界面來介紹jmeter的一些概念,如何使用jmeter讀入外部文本,如何根據jmeter產生的結果來生成漂亮的ui報告。
線程組界面
在這裏插入圖片描述

Number of Threads(users):開啓的線程數,也就是模擬的用戶數。例如,設置成500,那麼就是發送500個請求。
Ramp-Up Period(in seconds):在多長時間內建立全部的線程。默認值是0,當爲0時, 將立即建立所有線程,假設ramp-up period 設置成T 秒, 全部線程數設置成N個, JMeter 將每隔T/N秒建立一個線程。
Loop Count:每個線程執行的次數,可勾選forever

Samples(測試樣本數) = Number of Threads*Loop Count
如果像上圖那麼設置,那麼Samples=500*1=500

HTTP請求頁面
在這裏插入圖片描述

在這個頁面分爲basic和advanced兩個子頁面,這裏只介紹basic頁面的一些設置。

Protocol:協議,默認爲http
Server Name or IP:這裏填服務器名稱或者ip地址
Port Number:端口號,一般是8080
Path:路徑
Method:請求方法,可以選很多種,不過我們常見就是GET或者POST
Content encoding:內容編碼,如果發送的是中文,務必寫上 utf-8

拿百度翻譯的api來舉例: https://fanyi.baidu.com/v2transapi
Protocol:https
Server Name or IP:fanyi.baidu.com
Path:/v2transapi
Method:POST

目光向下
Parameters:傳遞參數的值和名稱
Body Data:簡單來說就是一個json格式的值
Files Upload:模擬文件上傳

如圖,比如在這個頁面上,需要傳遞兩個參數,一個是name,一個是text,一種方法如上圖所示在Parameters中填入參數相應的name和value,是中文的話最好在encode選項上勾選。如果寫成Body Data形式,如下:

name=your name&text=your text

在上圖中,可以看到text那一欄中的value,寫的是${text},這其實是一個自定義變量,引用的是外部數據,設置自定義變量是在數據配置界面。爲什麼要使用自定義變量呢?在模擬需要發送數據的請求時,直接用同一個值重複發送500次也是500個樣本,但是在真實環境下,用戶發送的數據是不一樣的,通過配置外部數據,我們可以最大程度的進行模擬真實情況,更好的評測服務器的負載能力。

數據配置界面
在這裏插入圖片描述
Filename:外部文件所保存的路徑,常用的有txt格式和csv格式

File encoding:編碼方式,中文的一般填utf-8

Varale Names(Comma-delimited):定義變量名,供其他模塊調用。如果存在多個變量時,用,隔開。如上文中的${text},其中的text就是在這裏定義的。

Delimiter(use “\t“ for tab):是指在如果有多個參數時,在定義的這個符號爲分割符號,進行提取,表格形式用\t。比如:需要引用的變量爲name,password,text。txt中每行的格式爲xiaohong;123;test,那麼分隔符便爲

Allow quoted data:是否允許引用數據;通常用在文件中有參數值內部包含分隔符的場景。用""將包含分隔符的參數括起來,例如設置的Delimiter爲;text參數值中包含了;那麼文本中格式便爲xiaohong;123;“text;test”。

Recycle on EOF:到數據文件結尾時是否循環讀取。設置爲True時,線程數過多,數據文件讀取到最後一行時,會再次從第一行開始讀取。設置爲False,到達文件結尾時如繼續讀取,則值會默認爲,可通過設置jmeter屬性csvdataset.eofstring來改變該值。

Stop thread on EOF:Recycle on EOF設置爲False,Stop thread on EOF設置爲True,則讀取數據文件最後一行後,停止測試,不管還有多少線程組未執行。

Sharing mode:共享模式。默認在所有線程組中使用,可選擇每個線程組單獨打開

HTTP頭管理頁面
在這裏插入圖片描述
該模塊用於定製Sampler發出的HTTP請求的請求頭的內容。不同的瀏覽器發出的HTTP請求具有不同的Agent,訪問某些有防盜鏈的頁面時需要正確的Reference這些情況下都需要通過HTTP Header Manager來保證發送的HTTP請求是正確的。

聚合報告界面
在這裏插入圖片描述
這個模塊用來顯示宏觀測試結果,也可以將結果數據寫入到文件中。對應的指標含義如下:
Label:取樣器名稱(或者是事務名)

#Samples:取樣器運行次數(提交了多少個事務)

Average:請求(事務)的平均響應時間,單位爲毫秒。

Min:請求的最小響應時間,單位爲毫秒。

Max:請求的最大響應時間,單位爲毫秒。

Std.Dev:響應時間的標準方差。

Error%:事務錯誤率。

Throughput:吞吐率(TPS)。默認情況下表示每秒完成的請求數(Request per Second)

KB/sec:每秒數據包流量,單位是KB。

Avg.Bytes:平均數據流量,單位是Byte。

結果樹界面
在這裏插入圖片描述
這個模塊用來顯示微觀測試結果,可以查看每個事務的詳細數據,如request的信息,和響應數據。觀察這個模塊,在事務出錯的時候,可以幫助我們瞭解錯誤原因,是40x還是50x,從而進行問題的解決。

後置處理器界面
beanshell postprocessor
在這裏插入圖片描述
在這個頁面可以編寫Script,來操作請求返回後的結果。如上圖所示,我們請求的頁面返回了JSON數據,其中包含了中文,如果不進行處理,那麼在view result tree界面中觀察response data會出現亂碼,添加如下代碼,即可顯示正常。

prev.setDataEncoding("utf-8")

生成漂亮的ui報告
很簡單,定位到jmeter bin文件夾下,執行以下命令

jmeter -n -t D:\Users\Desktop\Test Plan.jmx -l D:\Users\Desktop\html.csv -e -o D:\Users\Desktop\HttpReports

三個路徑依次是:xxx.jmx文件路徑,輸出xxx.csv文件路徑,要保存的http report的文件路徑。

參考文獻:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章