jmeter從安裝到使用


 最近,項目需要做接口測試,在python和jmeter之前選擇,最終還是選擇jmeter,雖然腳本管理及持續集成方面有所不便,但勝在使用簡單,調試方便,方便后續做並發壓力測試,而且最后的報告統計圖表也非常完善。但jmeter許久不用,早已忘記,經過這次應用,把相關的知識又撿了起來,特此記錄一下,方便后續查看。

安裝
jmeter的安裝非常簡單,總結起來就兩步,去官網下載發布包(前提是要首先安裝好jdk1.8以上版本,此處不再說明),配置好本機環境變量,然后,直接用就完了。

具體來說

1.jmeter官網 http://jmeter.apache.org/download_jmeter.cgi 下載發布包,本人取的是binaries版本。下載下來后直接解壓。
2.配置環境變量。由於jmeter實際是用java編寫的,這里實際上要配置的是java的環境變量。

在桌面,鼠標右鍵點擊“計算機”圖標,選擇“屬性”,點擊高級系統設置->高級->環境變量->系統變量,創建JAVA_HOME的系統變量,變量值為jdk的bin文件所在路徑,如下圖:

在系統變量中,點擊Path變量,點擊編輯,新增jdk的bin路徑%JAVA_HOME%\bin到環境變量中,並上移到最上面,點擊確定。如圖:

配置classpath變量,新增變量名CLASSPATH,變量值為.;%JAVAHOME%\lib;%JAVAHOME%\lib\tools.jar。(注意最前面有一個.,中間用分號隔開)如圖:

 

 點擊確定完成環境變量配置,便可打開jmeter安裝路徑,在bin文件夾下找到jmeter.bat的批處理文件,雙擊即可打開jmeter使用了。

 使用

jmeter的使用足夠寫一本書,這里只記錄此次踩坑或個人覺得特別重要的過程。

對於http應用來說,HTTP Header Manager這個配置元件是一定要有的,配置好http頭的各項信息,對於后續應用來說是極大地簡化了使用過程。此次我主要配置了Referer、Accept-Language、Accept-Encoding、Accept、User-Agent、token、Content-Type這幾項。個人覺得特別重要的是token和content-type。token需要在登陸后使用正則表達式提取出來,然后通過beanshell后置處理器保存為全局變量,再通過HTTP Header Manager中,每次的http頭部把token帶上。如圖:

 

 

content-type有3種類型,application/x-www-form-urlencoded、application/json和multipart/form-data。

application/x-www-form-urlencoded是url編碼的方式,具體參數格式類似:key1=value1&key2=value2

application/json是json格式的,形式如下:

{

 "key1":"value1",

 "key2":"value2"

}

multipart/form-data是表單,當既包含上傳文件,又包含其他上傳參數時,要用這種格式。以這種格式上傳,會在每一段加上分隔符,作為邊界。

HTTP Request Defaults作為配置元件,也是非常必要的,在這里配置遠端服務的IP和端口,以及編碼方式等信息,這樣在后續的http取樣器中,就無須再反復填寫IP和端口號。值得注意的是,在高級頁簽中,有代理服務器的IP和端口設置,這里設置本機的IP:127.0.0.1,端口是默認8888,這樣,每次jmeter運行,進行HTTP采樣時,通過fiddler等抓包工具,經過合適的配置,便可直接在fiddler中查看抓包信息,方便接口調試。如圖:

 

 接下來使用http取樣器,進行各個http接口的測試,需要注意的一點時,對於有上傳文件的http post請求,需在File Upload頁簽中設置后文件路徑和參數名,其中的參數名為在抓包中的name字段所包含的名稱,MIME Type需對應好具體的媒體類型,本次我上傳的是二進制流文件,因此對應的MIME Type為application/octet-stream

 

 需要注意,對於除了文件,還需上傳其他參數的http請求,參數中如果存在a={……}這樣的形式,需在高級選項卡中,選擇Implementation中的java方式,若不想在Implementation中選擇任何值,則需要對a參數進行URLEncoding,否則接口會報錯。

參數化

jmeter的參數化又是一個大課題,我此次用到了CSV Data Set Config,在配置元件中。如下圖:

參數說明如下:

Filename:csv文件路徑,可以是絕對路徑,也可以是jmeter腳本的相對路徑。

File encoding:文件編碼方式,選擇UTF-8。

Variable Names:引用變量名稱,以,分隔,后續以此變量名引用。

Ignore first line:是否忽視首行。

Delimiter:分隔符,默認,

Allow quoted data?:是否允許引用數據,默認False

Recycle on EOF?:結束后是否從頭開始循環?,選True

Stop thread on EOF?:文件結束后是否停止線程?選False

Sharing mode:共享方式,暫時選擇所有線程。

設置完畢后,就可以通過設置好的變量名稱,對csv文件中的各參數實行引用了。CSV Data Set Config和UserParameters不同,即便只有一個線程,也可以使用csv文件里面的參數,而用戶參數,是針對不同的線程來使用的。

性能監控

做壓測時, 除了為每個取樣器設置斷言的基本操作,對遠端機器的性能監控也是一個必要的步驟。本次用到的是2個插件,JMeterPlugins-Standard-1.4.0(pwd:cjqd)、ServerAgent-2.2.1(pwd:pxui);

解壓JMeterPlugins-Standard-1.4.0.zip,將其中\lib\ext\JMeterPlugins-Standard.jar包復制到jmeter安裝目錄下的\lib\ext下;

 重啟jmeter,選擇監聽器,我們可以看到監聽器中多了一些東西(這里邊就有我們監控要用到的功能),如下圖所示:

 選擇jp@gc-PerfMon Metrics Collector,界面如下所示:

  

點擊“AddRow”按鈕新增監控對象,可包含cpu、memory、i/o、swap等許多監控參數,點擊“Browse”按鈕,選擇待寫入監控信息的文件名,如不存在,則會自動新建,如已存在,則會詢問是否覆蓋或續寫文件。在非GUI測試時,也可以通過此功能,導入已生成的結果文件(.jtl),通過圖表形式查看各監控結果。

配置完監控界面,要真正的監控生效,還需要遠端機器上運行一個服務端,用來采集被監控機器的各資源消耗情況。這里用到的是ServerAgent插件。通過前文鏈接完成下載后,把它拷貝到被檢測服務器上,解壓,如果是windows的機器,直接運行startAgent.bat文件即可;如果你的服務器是linux,那么需要運行startAgent.sh文件即可(運行方式:找到startAgent.sh文件所在路徑,打開終端命令行,保險起見可以先將startAgent.sh設置成可執行文件:chmod 777 startAgent.sh,然后執行命令:./startAgent.sh,這樣我們的agent服務就啟動了);

然后,在每次運行jmeter腳本時,便會有遠端服務器的資源情況同時被監控。

非GUI運行

最后再補充說明一下非GUI方式運行jmeter的必要參數配置。如果高並發,或者一直盯着jmeter 的GUI界面上的監控圖表來看,jmeter很快就會由於內存不足而退出,此時需要用到非GUI運行,即命令行參數運行jmeter,同時保存結果以及生成html報告供查看。

windows

1、cmd打開命令行模式

2、切換到Jmeter安裝目錄下的bin目錄下

3、執行命令:jmeter -n -t jmx文件所在路徑 -l jtl文件所在路徑 -e -o 結果報告存放文件夾

注意:jmx文件為jmeter的腳本文件,jtl文件為jmeter運行結果存放文件,也可以保存為csv格式,結果報告存放文件夾為最終存放html報告的文件夾,必須事先不存在,否則會提示錯誤。

各參數釋義如下:

 

在腳本運行過程中,由於無界面,命令窗口會每隔一段時間打印一下當前的運行狀態,你會在窗口中看到類似下面的信息:

 

 summary+ 是開始這個時點的報告。

summary= 是總結它之前的報告,呈現出的是當前時點之前總的情況,通常是均值。

 最后一個summary=是本次壓測總的情況。

jmeter還可以做分布式壓測,本次由於壓力不大,暫時未做此嘗試,等后續有需要再學習試用。

總結

本次由於項目需要,對jmeter做了一個全面的回顧,以及使用技巧上的復習。但是jmeter還有許多高級屬性,尤其beanshell的使用,仍然了解非常淺顯。還有取樣器之間的各種邏輯,也沒有涉及到這塊的使用。另外,高並發下,對性能瓶頸做出判斷和分析,包括對jvm的監控分析,也是欠缺的能力。道阻且長,行則將至。加油!

參考文檔:

https://blog.csdn.net/MenofGod/article/details/79009646?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://www.cnblogs.com/L-Test/p/9427795.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM