此文轉自微信公眾號:自動化性能測試
JMeter常見問題及解決方法
一、錄制不到以html結尾的請求
在使用代理服務器錄制腳本的時候,可能會出現html結尾的請求錄制不到的問題。這是因為瀏覽器為了提升訪問速度,將這些請求獲取到的html資源作為靜態資源緩存在本地了,所以只要打開過一次主頁,接下來每次打開主頁時,都無需再發送這些請求。對於性能測試來說,主頁中這些html資源,是有必要反復進行壓測的。因此錄制腳本的時候,必須將這些請求錄制下來。
解決方法:
只要每次錄制前,清空瀏覽器緩存就可以了。
(建議使用抓包方式做腳本)
二、響應數據中有亂碼
使用錄制下來的測試腳本進行測試的時候,查看結果樹,可能會出現響應數據中有亂碼。
解決方法:
1、找到安裝目錄/bin下面的jmeter.properties配置文件,如下:
2、打開jmeter.properties配置文件,找到“sampleresult.default.encoding”這個配置項,將原來的默認值“ISO-8859-1”修改為“utf-8”即可,修改后的配置如下所示:
3、重啟jmeter,重新執行測試。這時響應數據中就不會有亂碼了。
三、請求數據中有亂碼
設置HTTP請求,參數中的值顯示為中文,但系統接受數據時,中文顯示為亂碼;在“查看結果樹”中,查看HTTP請求,請求參數中的中文數據顯示亂碼。
解決方法:
在HTTP請求頁面,Content encoding設置為utf-8即可。
四、JMeter內存OOM
執行測試的時候,可能會出現OutOfMemoryError這樣的異常。JMeter是java實現的工具,內存是由java虛擬機JVM管理的。如果出現了內存溢出的問題,可能調整JVM內存相關的參數進行優化。
步驟如下:
1、在window下,找到jmeter.bat啟動腳本;
2、編輯jmeter.bat腳本,找到下面這些配置項。
3、參數調整
可以調大堆內存的大小:
將默認的set HEAP=-Xms512m -Xmx512m,
改為:set HEAP=-Xms1024m –Xmx1024m
或者調大堆內存中新生代的大小:
將默認的set NEW=-XX:NewSize=128m-XX:MaxNewSize=128m,
改為:set NEW=-XX:NewSize=256m-XX:MaxNewSize=256m。
或者調大永久帶的大小:
將默認的set PERM=-XX:PermSize=64m-XX:MaxPermSize=128m
改為:set PERM=-XX:PermSize=128m-XX:MaxPermSize=256m
調整后重啟jmeter,執行測試,問題一般能得到解決。需要說明的是,參數的取值不能一概而論,也要根據大家電腦的硬件配置實際選取。
五、測試機配置不能滿足壓測要求
Jmeter壓測過程中,由於測試機配置有限,CPU、內存都可能是存在瓶頸。如果使用很大的並發進行測試時,就可能會感到程序比較卡,這時候就無法繼續增加壓力了。
解決方法:
搭建Jmeter分布式集群,遠程啟動測試。
步驟如下:
1、在分布式集群中,腳本編輯、控制的機器叫做“client”,實際運行Jmeter測試腳本,負責向被測服務器發請求的機器,稱為“server”。網絡要求
2、server和client需要網絡互通。找幾台機器作為 server,然后client和server相互ping彼此的ip地址,如果能ping通,說明網絡是ok的。
和client一樣,server可以是linux系統,也可以是windows系統。 client上安裝的JMeter版本最好和client保持一致。
在本文演示中,作為client機器,ip是172.31.132.242。
作為server機器,ip是172.17.3.212。
3、演示中,因為server是linux系統的,我們需要去官網下載linux系統對應的JMeter安裝文件,解壓即可。
進入安裝目錄:apache-JMeter-2.13/bin下,啟動server端程序,執行:./JMeter-server (windows下啟動JMeter-server.bat)
如果server機器有多個ip,啟動的時候可以指定一個,如:
./JMeter-server-Djava.rmi.server.hostname=172.17.3.212
配置和啟動client端安裝目錄的bin文件夾下,找到JMeter.properties文件,如下:
打開文件,並找到remote_hosts=127.0.0.1這一行,修改為server服務器的列表,如下所示,如果server有多個,那么多個機器地址之間使用英文逗號分隔:
其實,client自己可以同時作為一個server機器,向服務端發送請求(前提是client上也啟動了JMeter-server程序),所以也可以把client的ip加上,添加自己只需要寫127.0.0.1即可。本文的演示中,先不添加client自己,所以使用的是第一個配置。
如果client有多個ip,也可以在啟動的時候指定一個。 如果是windows系統,可以修改jmeter.bat啟動腳本,在以下的命令最后,加上如下的配置,寫明client這台機器的ip地址即可。
修改完畢后保存,啟動Jmeter,打開界面。
執行分布式測試
打開client端的JMeter界面,點擊運行-遠程啟動,里面能看到配置好的server端的機器列表。
此時可以啟動一個遠程機器,也可以選擇下面的“遠程全部啟動”,同時啟動所有的server。點擊后,client端會自動和server端的服務建立連接,下發測試腳本到server端; 等server端的測試全部結束后,會將測試結果匯總到client端,我們在client端配置的監聽器就能看到測試結果了。