JMeter我們應該學會使用哪些功能?

特別鳴謝《全棧測試筆記》公衆號,很優秀的開源測試公衆號整理,用於公司內部培訓及技能總結!

背景:

對我們測試來說,jmeter應該是我們使用較頻繁的測試工具之一,因爲其開源、免費、輕量、功能強大,支持很多種協議,除了測功能,還能做接口和性能自動化;

從各大招聘網站或其他線上培訓機構,常常使用期來吸引一部分學員,而在性能測試工具中,jmeter市場佔有率慢慢的超過了loadrunner商業性能測試工具;如此優秀的測試工具,作爲優秀的測試人員是必須掌握的;

然而經常看到QQ羣或其他博客論壇討論jmeter的各種“晦澀難懂”的功能,譬如支持一些groovy腳本、還要黏貼python膠水語言,當然這不排除其場景確實需要這些來輔助,友情提示一下:還是不要過度使用其功能;

在實際工作中,jmeter常用的功能並不多,把主要的功能元件掌握,基本上可以搞定90%的需求,所以,不要把時間耗費在工具不常用的功能上,如果是做性能測試,分析定位調優纔是重中之重。

 

JMeter常用功能介紹

從jmeter2.x版本用到現在的5.x,常用功能進階得並不是很多,如下舉例(想要詳細瞭解的可以參考其JMeter官網或本人CSDN博客都有部分使用介紹):

從添加測試計劃-線程組開始(基本按執行順序介紹)

【配置元件】

        HTTP信息頭管理器:接口中特別需要指定的請求頭,如content-type、或token鑑權

        HTTP Cookie管理器:適用於做web功能測試,保持cookie不過期

        CSV 數據文件設置:相當於參數化數據文件,可以是測試用例(接口自動化中)

        HTTP請求默認值 :對於接口請求中通用的公共部分進行提取,如url、port或通用參數

【前置處理器】

        BeanShell PreProcessor:提前準備數據的元件,支持java及jmeter自帶的功能腳本

【邏輯控制器】

        事務控制器:這個來做事務控制的,譬如一個場景中涉及多個接口,單個接口是一個子事務,但是我們需要將其作爲一個整體事務看待,就需要這個元件了。

        ForEach控制器:一遍用來遍歷上一個接口返回的數據中有多個元素的時候,例如提取響應結果中所有滿足條件的參數,需要一一遍歷,又譬如sql請求的結果集也需要遍歷的場景

        僅一次控制器:適用於性能測試場景中只需一次操作的請求,例如登錄,這裏必須要提一點的是它只跟線程組中的線程數有關,至於迭代數無關

【定時器】

        固定定時器:相當於thinktime,

        高斯隨機定時器:這個類似thinktime但是它是有活動範圍的,即一個時間區間等待

        Synchronizing Timer:同步定時器,jmeter中的集合點,它的第二個參數是timeout,如果非0,即爲等待對應時間不滿足集合數也會執行sampler請求

【Sampler】

        HTTP請求:應該瞭解http協議的各種請求及傳參方式,比較難的應該是文件上傳/下載的接口,同樣支持soap協議的請求;

        BeanShell Sampler:一般作用自己寫腳本來完成測試,畢竟需要一些java基礎

        Debug Sampler:說白了就是調試腳本時使用,需要測試jmeter腳本中使用的變量是否正確

比如sampler取樣器支持的java、jdbc、ftp、webservice等協議,如果不滿足其它協議,需要我們自己開發,所以java基礎是必備的條件。

【後置處理器】

        正則表達式提取器:動態參數關聯的方式很多,可以根據實際請求來選擇,例如json的少不了json path提取器,又如爬蟲工作中喜歡用的正則

        Debug PostProcessor:除了可以看到jmeter變量,還可以看到配置信息,最好放在正則表達式提取器後面,否則看不到提取的結果,說白了還是對後置處理器使用的調試

        BeanShell PostProcessor:處理samlper請求響應結果數據的。

【斷言】

        響應斷言:最簡單的,在接口測試設計中,一般沒有出現數據變動或者響應結果簡單的情況下使用

        BeanShell斷言:屬於高級斷言,因爲是編寫腳本,所以比較靈活

【監聽器】

        查看結果樹:調試結果使用,其上有各種tester調試視圖

        聚合報告:可以查看性能測試結果的數據,如:響應時間分:90、95、99,這幾個值可以通過配置文件修改的,還有錯誤率、tps等性能指標

 

【函數助手】

這個按需使用,例如隨機函數、隨機字符串函數、線程計數器函數、環境變量參數函數、時間函數等

 

不得不說的分佈式壓測:什麼樣的情況下需要分佈式壓測?

第一,大用戶量併發的時候

第二,負載機不支持大併發的時候

第三,同第一,大數據的情況下

 

另外,beanshell相關的元件,基本語法是通用的,上述所介紹元件中就有四類beanshell元件使用:前置處理器、取樣器、後置處理器、斷言等等,可見java基礎非常重要!

 

【JMeter執行順序】

配置元件 → 前置處理器 → 定時器 → 取樣器 → 後置處理器 → 斷言 → 監聽器;

tips:同一層級的,順序執行; 

 

最後,我們來看看官方的性能測試最佳實踐,地址是:

http://jmeter.apache.org/usermanual/best-practices.html

 

 

 

chrome瀏覽器右鍵翻譯內容如下:

16.7減少資源需求

關於減少資源使用的一些建議。

  • 使用CLI模式:jmeter -n -t test.jmx -l test.jtl
  • 使用儘可能少的偵聽器;如果使用上述的-l標誌,則可以將其全部刪除或禁用。
  • 在負載測試期間不要使用“查看結果樹”或“在表中查看結果”偵聽器,僅在腳本編寫階段使用它們來調試腳本。
  • 與其使用大量相似的採樣器,不如在循環中使用相同的採樣器,並使用變量(CSV數據集)來改變採樣。[“包含控制器”在這裏無濟於事,因爲它將文件中的所有測試元素添加到測試計劃中。
  • 不要使用功能模式
  • 使用CSV輸出而不是XML
  • 只保存您需要的數據
  • 使用儘可能少的斷言
  • 使用性能最高的腳本語言(請參閱“ JSR223”部分)

如果您的測試需要大量數據(尤其是需要將其隨機化),請在可通過CSV數據集讀取的文件中創建測試數據。這樣可以避免在運行時浪費資源。

 

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