12張圖開啟JMeter體系結構全域性視角
阿新 • • 發佈:2021-03-03
JMeter是Java技術棧工具,在軟體測試領域應用非常廣泛,無論是效能測試還是介面測試,技術都很成熟和穩定。它有一個突出特點:開源,適合做二次開發,以阿里為代表的Java技術棧公司都對它青睞有加。在JMeter之前,我最早接觸的工具是LoadRunner,畢業後還買過一本《精通軟體效能測試與LoadRunner最佳實戰》的書,但是它的時代已經過去:
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092200705-1545935848.png)
> 截圖為測試開發社群TesterHome討論帖。
這是JMeter的時代,JMeter系列文章將根據《全棧效能測試修煉寶典JMeter實戰》這本書來編寫。本文介紹JMeter的組成結構,閱讀後對JMeter形成整體認知和初步印象。為了便於後續講解,先明確下2個術語:
- 元件:如HTTP請求、事務控制器、響應斷言,就是一個元件。
- 元件:如邏輯控制器,就是元件。元件中包含一個或多個元件。
大的叫元件,小的叫元件,也沒那麼嚴謹,你想叫控制元件都行!先以元件的維度,看一下JMeter結構圖:
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092201093-1852784031.png)
X、Y、Z形成了一個三維立體空間。
X1~X5表示的是:5個模擬過程。
Y1表示的是:使用者請求。
Y2表示的是:結果驗證。
Z表示的是:結果收集。
# X1【取樣器】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092202840-1191447861.png)
通過訪問 測試計劃|執行緒組|取樣器 新增`Sampler`。
可以把它看做是一個沒有介面的瀏覽器,可以傳送請求,接收響應。支援HTTP請求、WebService請求(SOAP/XML-RPC)、Java請求等。涵蓋了協議包括HTTP、FTP、JAVA、LDAP、MAIL、MongoDB、SMTP、SOAP、TCP、Junit等。還能寫BeanShell指令碼,一種類似Java的指令碼開發語言。
# X1【斷言】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092204559-1651081932.png)
通過 測試計劃|斷言 新增`Assertions`。執行緒組也能新增斷言。
一般用響應斷言(Response Assertion)比較多。可以寫BeanShell實現自定義複雜斷言。
# X1【監聽器】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092204793-739133989.png)
通過 測試計劃|監聽器 新增`Listener`。執行緒組也可以新增監聽器。
可以用於展示結果。如察看結果樹(View Results True),檢視每次請求和響應。聚合報告(Aggregate Report),類似測試報告。
另外,也可以把測試結果資料儲存到檔案,供再次分析使用。
# X2【前置處理器】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092205017-1411679726.png)
通過 測試計劃|前置處理器 新增`Pre Processors`。執行緒組也可以新增前置處理器。
在傳送請求前,需要做一些環境或資料準備,就需要用前置處理器。比如對資料庫操作前,需要先建立資料庫連線。
# X2【配置元件】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092206680-847561284.png)
可以通過 測試計劃|配置元件 新增`Config Element`。執行緒組也可以新增配置元件。
它的作用是,為取樣器提供配置資料。比如使用`CSV Data Set Config`,從檔案中讀取測試資料。比如使用函式(函式助手)生成動態資料。比如使用`HTTP Cookie Manager`,自動記錄伺服器返回的Cookie資訊。比如使用`User Defined Variables`,預置一些初始化變數。
# X2【後置處理器】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092207911-1439036740.png)
可以通過 測試計劃|後置處理器 新增`Post Processors`。執行緒組也可以新增後置處理器。
它的作用是處理響應資料。比如正則表示式提取器(Regular Expression Extractor),使用正則表示式來匹配響應結果,提取部分資料。
# X3【邏輯控制器】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092208138-1003574104.png)
可以通過 測試計劃|執行緒組|邏輯控制器 新增`Logic Controller`。
它用來對處理邏輯進行控制。比如只登陸一次,可以用 Once Only Controller 來實現。
# X4【定時器】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092208376-925106800.png)
可以通過 測試計劃|執行緒組|定時器 新增`Timer`。
它用來設定等待時間。比如等待5秒後再發送請求。比如讓多個請求等待到同一時刻傳送。
不同定時器有不同功能。
# X5【執行緒組】
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092208644-1584631078.png)
可以通過 測試計劃|執行緒組 新增`Threads(Users)`。
Threads(Users),既是Thread,也是User。JMeter一個執行緒模擬一個使用者。
# Test Fragment
![](https://img2020.cnblogs.com/blog/1629545/202103/1629545-20210303092209975-798432638.png)
可以通過 測試計劃|Test Fragment 新增。執行緒組也可以新增。
可用於臨時備份元件,Test Fragment下的元件不會被執行。封裝後可被模組控制器呼叫,就像程式設計一樣。
# 小結
本文從JMeter結構圖展開講解,通過元件截圖描繪出了JMeter體系結構。取樣器、斷言、監聽器組合在一起就可以完成傳送請求、驗證結果和記錄結果。前置處理器、配置元件、後置處理器都是為取樣器提供資料支援的。邏輯控制器可以實現各種需求。定時器可以設定集合點和等待時間等。JMeter是用執行緒組來模擬的,一個執行緒就是一個使用者。Test Fragment可以用來備份元件,底下的元件不會被執行。
> 參考資料:
>
> 《全棧效能測試修煉寶典JMeter實戰》
>
> https://testerhome.com/top