1. 程式人生 > >jmeter做壓力測試心得

jmeter做壓力測試心得

什麼是效能壓測?

  • 也是最近剛剛接觸到,就是被測試的系統,在一定的訪問壓力下,看程式執行是否穩定/伺服器執行是否穩定,通常情況,是模擬多個請求同時 請求伺服器,也就是在某個時間內,比如說1秒內,呼叫介面達到200次,結果就是介面呼叫成功率、最大請求花費時間、最小請求花費時間還有一些效能引數,做效能壓測目前來講大多數來說都是藉助 工具軟體來完成的,真正去寫一套指令碼來完成效能壓測的步驟已經很少很少了,所以我們接下來講的就是比較常用的工具-Jme

前期準備!!!

首先,你要去官方那裡下載Jmeter的壓縮包,官方地址是http://jmeter.apache.org/,另外,你的系統要配置好java環境,我寫這篇部落格的時候,用的版本是3.0,下載完了之後,進入裡面的bin目錄下,

 找到jmeter.bat這個批處理檔案,然後雙擊,進入jMeter的工作介面,這裡面有很多功能,這我們先別去理會這一些,按照我們下面的步驟一點一點來做就可以一個基本的壓力測試了.

Jmeter效能引數配置

  • 執行緒數:一個使用者佔一個執行緒,200個執行緒就是模擬200個使用者;
  • Ramp-Up Period(in seconds):設定執行緒需要多長時間全部啟動。如果執行緒數為200 ,準備時長為10 ,那麼需要1秒鐘啟動20個執行緒。也就是每秒鐘啟動20個執行緒;

  • 迴圈次數:每個執行緒傳送請求的次數。如果執行緒數為200,迴圈次數為10,那麼每個執行緒傳送10次請求。總Samples為200*10=2000。如果勾選了“永遠”,那麼所有執行緒會一直髮送請求,直到選擇停止執行指令碼。

  • 注意,如果要真正模擬多個使用者併發的話,比如說你要模擬100個使用者併發,那麼你的執行緒數一定得是100,不能是25個執行緒,每個執行緒 內包含4個請求,舉個栗子,假如有4個介面,要模擬2000個使用者併發,每個介面500個使用者,那麼你的解決方案是:建立4個執行緒組,每個執行緒組的執行緒數是500,同時併發執行4個執行緒組(這一點你不用做,jmeter的機制 就是執行緒組都是併發執行的,不用擔心這個)

Summary Report引數解釋

  • Samples:傳送了多少個請求;
  • Average:平均請求時間;
  • Min:最小請求時間;
  • Max:最大請求時間;
  • Error:請求失敗率;
  • Troughput:Throughput,即每秒鐘伺服器處理的Samples,單位是tps(transaction per second),也有說成是rps(request per second);
  • KB/sec:伺服器每秒接收的資料量;
  • 90% Line:90%請求響應時間不會超過XX秒;
  • Median:中位數,50%響應時間小於XX秒;

排程器的使用?

答:

  • Jmeter的執行緒組設定裡有一個調配器設定,用於設定該執行緒組下指令碼執行的開始時間、結束時間、持續時間及啟動延遲時間.

  • 啟動時間:測試計劃什麼時候啟動,啟動延遲會覆蓋它。當啟動時間已過,手動執行指令碼時也當前時間也會覆蓋它(但啟動時間頁面顯示不會變);

  • 結束時間:測試計劃什麼時候結束,持續時間會覆蓋它;

  • 持續時間(秒):測試計劃持續多長時間,會覆蓋結束時間;

  • 啟動延遲(秒):測試計劃延遲多長時間啟動,會覆蓋啟動時間.

影響效能壓測的引數有哪些?

答:

  • (1).系統伺服器所在機器的環境,包含硬體配置記憶體大小和系統,首先記憶體大小是這樣,比如我們的記憶體條大小是4G,那麼伺服器分給使用者可支配的大小可能只有3G,剩餘的1G用於 系統自身呼叫,其次,取決於我們當前伺服器所在的系統,實際上對應的就是不同的系統預設設定的執行緒棧所佔用的記憶體大小不同,我們通常所說的執行緒對應的我們的物理資源就是 執行緒棧所佔用的記憶體,不同的系統這個值是不同的,可以在裝完系統後進行更改,假如我們使用者所支配的記憶體大小是3G,windows一個執行緒棧是1M,那麼當前伺服器最多也就支援 3*1024個執行緒併發,超過這個數目,就需要等待前面的執行緒完畢之後才能執行,也就是所說的等待狀態.

  • (2).web 伺服器的配置,我們目前的介面基本上 都是部署在tomcat上,tomcat自身會有一個關於程序的配置,包括最大程序連線數、請求超時時間等.

如何新增關於伺服器的CPU、記憶體等的測試查詢?

答:

  • 1.下載Jmeter Plugins manager外掛,下載地址 http://jmeter-plugins.org/downloads/all/ ;

  • 2.解壓檔案,並將jmeter-plugins-tst-2.0.jar放在jmeter-3.0\lib\ext路徑下;

  • 3.重啟Jmeter,並點選上方選單選項->Plugins Manager;

  • 4.點選Avalible Plugins並找到Perfmon外掛、點選右下角的Apply Changes and Restart Jmeter;

  • 5.重啟後點擊測試計劃->新增->監聽器->jp@gc - PerfMon Metrics Collector;

  • 6.下載Jmeter ServerAgent外掛,下載地址 http://jmeter-plugins.org/downloads/file/ServerAgent-2.2.1.zip;

  • 7.解壓檔案,並將檔案放到伺服器所在的機器上,目前這款外掛支援windows、linux環境;

  • 8.啟動ServerAgent,windows用bat啟動,linux用sh啟動,預設佔用埠4444;

  • 9.在Jmeter的開啟介面的jp@gc - PerfMon Metrics Collector外掛中配置Host/IP為伺服器的IP,然後新增測試的內容,有CPU、記憶體、網路等;

  • 10.在UI方式執行測試計劃,就會有結果,但目前還未找到命令列生成的測試查詢包含這個外掛

如何通過命令列的方式執行測試計劃並生成html測試查詢?

答:

  • 執行命令:jmeter -n -t “test JMX file” -l “test log file” -e -o “Path to output folder”
  • 引數解釋:
    test JMX file-測試計劃所在的檔案 支援格式為.jmx檔案格式;
    test log file-預設生成的測試查詢檔案 支援格式為.jtl或者csv檔案格式,預設是.jtl;
    Path to output folder-html測試查詢存放的路徑,是個資料夾;
  • Jmeter配置:在jmeter.properties或者user.properties確認如下配置項;
  • jmeter.save.saveservice.bytes = true
  • jmeter.save.saveservice.label = true
  • jmeter.save.saveservice.latency = true
  • jmeter.save.saveservice.response_code = true
  • jmeter.save.saveservice.response_message = true
  • jmeter.save.saveservice.successful = true
  • jmeter.save.saveservice.thread_counts = true
  • jmeter.save.saveservice.thread_name = true
  • jmeter.save.saveservice.time = true
  • jmeter.save.saveservice.timestamp_format = ms
  • jmeter.save.saveservice.timestamp_format = yyyy/MM/dd HH:mm:ss

答:Cookie的設定中,也就是HTTP資訊頭管理器中,如果要設定多個key和多個value, 只需要建立一行,名稱是Cookie,值是key1=value1;key2=value2;key3=value3的格式

GUI和Shell壓測方式的差異

 
  1. 1.GUI頁面更適合單次除錯或者少併發的情況下,否則大併發下易造成聚合報告、檢視結果樹等載入緩慢,圖形卡死;
  2. 2.Shell頁面實時統計(每30s重新整理一次)請求總數、平均響應時間、最小請求時間、最大請求時間以及併發量;
  3. 3.Shell頁面壓測過程中,會實時在指定日誌檔案中記錄每個執行緒每個請求的執行過程,展示項可在jmeter.properties檔案中的jmeter.save.saveservice選項下個性化設定;
  4. 4.Shell頁面壓測結束後,會產出更加詳細資料以及視覺化的html格式的測試報告,更加便於檢視和統計(如若壓測過程中手動停止壓測,如ctrl+c,則不會產生報告);

BeanShell和自定義函式實現MD5演算法的差異

 
  1. BeanShell作為前置處理器中的一種,會線上程傳送請求前完成所需操作,如本次壓測過程中,由於業務需求,需要進行簽名操作,它是指令碼語言,動態載入執行,所以效率不高,不太適合放在迴圈內部,易造成多執行緒同時呼叫BeanShell,阻塞在傳送在http請求前,實際上客戶端並沒有在單位時間內傳送預期請求數到達伺服器端,從而看到伺服器的吞吐量和預期併發量相差很多。

Websocket相關壓測

答:Jmeter本身不支援websocket協議的,所以需要安裝第三方的外掛還有6個依賴包。連結: http://pan.baidu.com/s/1kV8QmN1 密碼: hx2v 安裝方式很簡單,解壓完成以後直接放到jmeter的\lib\ext\目錄下,然後重啟Jmeter就OK了,以下為各項引數含義

 
  1. WebServer:
  2. (1)Server Name or IP:WebSocket傳送的目標伺服器的地址或者名稱;
  3. (2)Port Number:WebSocker伺服器監聽的埠號。(一般是HTTP 80埠,可以通過WireShark資料包得到);
  4. Timeout:
  5. (1)Connection – 傳送一個連線請求後,Jmeter等待連線完成的最長時間,單位是毫秒;
  6. (2)Response - 對響應訊息的最大等待時間;
  7. WebSocket Request:
  8. (1)Implementation – 只支援RFC6455(v13) ,WebSocket協議標準的最新版;
  9. (2)Protocol – 有ws與wss之分, ws字首是WebSocket連線的辨別標識,wss字首是WebSocket安全連線的辨別標識。根據自己的實際情況填寫;
  10. (3)Streaming Connection – 選擇這個TCP session要不要保持,如果勾上標識連線會一直存在,如果沒有勾上,那麼得到第一次響應後該連結就會被關閉;
  11. (4)Request data:填入將要傳送的請求,要跟開發溝通好,這個是什麼格式的訊息;
  12. WebSocket Response:
  13. (1)Response Pattern – 取樣器將等待含有該標識的訊息並繼續通訊(或者直到timeout,該連線關閉);
  14. (2)Close Connection Pattern – 如果伺服器返回的訊息含有這樣的字元,就結束會話;
  15. (3)Message Backlog – 定義伺服器返回訊息保留的最大長度;
  16.  
  17. Jmeter上完成Websocket的壓測主要流程會涉及到以下三個請求
  18. 第一步是http get請求,如http://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=polling&t=test,得到的response會含有一個字典包含一個欄位叫做['sid'],把對應的value值拿到 (可以採用後置處理器中的正則表示式提取器),這一步實現就是向伺服器第一次握手,伺服器返回唯一的一個會話id;
  19. 第二步是http get請求,如http://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=polling&t=test&sid=value,就是在第一步請求後拼接上sid=value,value等於第一步拿到的值,這一步實現的是向伺服器傳輸一條資料,然後伺服器返回響應資料,第二次握手;
  20. 第三步是websocket請求,如ws://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=websocket&t=test&sid=value,就是在第二步請求上將transport=polling改為transport=websocket,這一步實現的是和伺服器正式確認連線;

結語:

跟大家推薦一個學習資料分享群:747981058,裡面大牛已經為我們整理好了許多的學習資料,有自動化,介面,效能等等的學習資料!人生是一個逆水行舟的過程,不進則退,咱們一起加油吧!