臨時客串了下性能測試人員,對Web頁面進行了壓力測試,做個記錄,方便以后的查閱。
先用了阿帕奇的JMeter進行的壓力測試,后來又使用了loadrunner。今天先整理下JMeter的壓力測試。
先介紹下JMeter吧:
Apache JMeter是100%純java桌面應用程序,被設計用來測試C/S結構的軟件(例如web應用程序)。它可以被用來測試包括基於靜態和動態資源程序的性能,例如靜態文件,Java Servlets,Java 對象,數據庫,FTP 服務器等等。JMeter可以用來模擬一個在服務器、網絡或者對象上大的負載來測試或者分析在不同的負載類型下的全面性能。
他的優點有兩個,一個是他是純開源的JAVA程序,因此他支持插件開發,可以根據項目工程的需求進行插件開發,來達到你所需要的最終的結果數據。另一個就是它是免費的對於項目工程來說,節省一筆開資。
JMeter的運行環境以及安裝就不說了,網上有很多教程的......自行查閱吧。
接下來就按我的使用過程進行敘述吧。
1、首先進入頁面后選項里可以進行語言設置選項,因為第一次接觸,所以選擇了中文。進入的界面就是這樣的。在workBench中右鍵添加---非測試元件---HTTP代理服務器
進入如下的的界面
2、打開IE瀏覽器,工具---Internet選項----連接---局域網設置
勾選代理服務器,地址填成localhost,端口號和之前建立的HTTP代理服務器中的端口號保持一致。
3、在JMeter的測試計划中右鍵測試計划添加—Threads---線程組
如下:
其中名稱可以根據你所測試的部分進行命名。
然后說下線程屬性,其中線程數就是你需要的並發量,壓力測試,就是測試他能承受多大的並發量。而Ramp-Up表示的是每秒鍾里啟動的數量,循環次數就是指這些線程是否循環執行。
4、打開IE瀏覽器,輸入你要測試的Web頁面中需要測試的功能。比如現在測試登陸的功能,進入網址http://www.XXX.com。(根據你項目需求填寫)
5、進入JMeter中的HTTP代理服務器,將目標控制器選擇你之前建立的測試計划中的登陸,點擊啟動
然后在打開的網頁中輸入用戶名和密碼(我介紹的是登錄界面,所以需要登錄),然后點擊登陸。
6、登陸完成后,進入JMeter的HTTP代理服務器,點擊停止。在登陸的
測試計划中會出現自動生成的線程,如圖所示。
這些線程則為有關登陸的線程,測試其他的功能模塊也用如上的方法。
7、現在,頁面中關於登陸的功能已經導入到了JMeter當中。進入JMeter當中進行模擬測試即可。 在測試計划下的登陸線程組當中右鍵添加---監聽器(Listener)---查看結果樹(View Result Tree)
如下圖:
點擊工具欄中的啟動按鈕(就是回放功能),讓JMeter再次運行,有如下結果:
根據頁面情況,如果登陸成功,頁面會顯示出歡迎XX光臨,那如果響應數據中有歡迎則表示頁面成功的跳轉了。
8、通過觀看查看結果樹中的新生成的線程,查看右面的響應數據,我們可以得到如下
我們可以確定,歡迎出現在/client/shopclient/loginonLogin.action當中。
9、同樣的,我們可以在測試計划的線程組當中添加斷言並且保存,斷言結果,設置如下:
10、斷言結果中運行后,出現如下,則表示滿足斷言中要求。
如果沒有找到你所設置的斷言內容,則會提示Test failed。
11、JMeter同樣可以模擬多用戶同時登陸系統。在登陸線程組中右鍵添加---Sampler---HTTP請求
在HTTP
Request中。發送參數,可以將參數信息錄入到文件當中,然后將參數的Value值設置為讀取文件即可。其調用_StringFromFile函數,如下:
文件格式多為.dat文件,文件內容格式使用標准的TXT文件格式,如下圖:
一行保存一條數據,如果一行有多個參數,用逗號分隔。
12、同樣的,在線程組當中也可以添加其他的控件,比如添加循環控制器,Loop Controller等,添加循環次數,然后模擬多次運行。
13、添加結果圖
可以根據用戶的需求,選擇結果圖的樣式,如果沒有用戶需要的,還可以下載其他的插件或者自己開發,同樣可以滿足。其中JMeter提供了Aggregate Graph的柱形圖,Graph Results 線性圖等,根據需要去選擇不同的結果圖。點擊運行后做出最終的結果圖。
14、結果圖:
根據給予的指標,去判斷最終的結果是否達標。可以勾選不同的顯示圖形,生成不同的圖形曲線,從而進行判斷。
注意
上面部分就是很簡單的一些操作,自己具體鼓搗下就能出來。下面列舉點自己當初遇到的問題。
1、腳本錄制的時候,用JMeter錄制腳本的時候,可以看上面圖看出來,錄制下了action,就是能夠觸發服務器相應的代碼部分,但是當時我操作過程中,發現錄制下來的信息沒有能夠觸發服務器相應,這就相當於這個過程沒有了意義。當時我的解決辦法是換了一個錄制工具,我使用了Badboy錄制,然后將錄制后的記過導入到了JMeter當中,再進行回放,問題解決。
2、線程設置那一塊,如果要測試多線程,個人建議,少量的增加,可以以20,30往上面遞增。由於是用JAVA編寫的工具,工具本身的性能大家都清楚,如果並發線程太大了,小心服務沒事,JMeter先掛掉了。基本上100-200,一台機器跑是沒有問題的。鄙人曾經跑過1000個線程,很不幸的機器直接掛掉了,如果要跑大數據,建議多台機器進行操作。
3、工具的使用其實挺簡單的,性能測試,壓力測試里面最主要的部分在於性能分析。根據工具給你提供的數據,你要去分析你對應測試模塊的性能如何,並且找出哪塊的問題欠妥。如果你本身也是開發人員,找到對應的地方去修改,去優化性能。這才是最主要的問題。
不過么,畢竟是開源的東西,他的弱點就在於結果圖上面,你無法定位到是數據庫問題,是文件服務器問題,是代碼問題等等。所以,這個工具在結果分析上面還是有點欠妥。當然,如果對於大神來講,可以根據自己的需求,再去開發一些插件去跟蹤想要觀察的數據,但是開發成本又進入到了項目當中。
所以下次去說說Loadrunner這個工具,這個工具付費的,但是他的結果圖相當的完美,完全能夠滿足你的需求。