一、jmeter目錄介紹
(1)bin 目錄:可執行文件目錄
主要理解其下面的以下文件以及命令。
jmeter.bat:Windows 的啟動命令。
jmeter.log:日誌文件。
jmeter.sh:Linux 系統下的啟動文件。
jmeter.properties:系統配置文件,如配置編碼格式。
jmeter-server.bat:Windows 分布測試要用到的伺服器配置。
jmeter-server:Linux 分布式測試要用到的伺服器配置。
(2)docs:接口文檔目錄
對 JMeter 集成的接口進行說明。
(3)extras:擴展插件目錄
例如:進行持續集成時,會將用到的 Ant、Maven 的插件放在這個目錄下面。
(4)lib:JMeter 運行所依賴的插件目錄
該目錄下面全部都是 jar 包,JMeter 會自動在 JMETER_HOME/lib 和 ext 目錄下尋找需要的類。
這裡補充一下,如果在 Jmeter 中運行腳本時報java.lang.NOClassDefFoundError 的錯誤,都是因為缺少依賴的 jar 造成的。
(5)licenses:Jmeter 證書目錄
證書目錄
(6)printable_docs:用戶操作手冊目錄
用戶使用手冊
(7)backups:腳本備份目錄
這個目錄是在 3.3 版本後才加入的新功能,防止我們誤刪腳本,所有的腳本都會自動備份在裡面。
私信555 可以獲取全套Jmeter視頻教程和實戰及面試題Python自動化測試全套視頻資料免費領取
二、jmeter主要組件介紹
1.測試計劃是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
測試計劃就是一個完整的場景
「獨立運行每個線程組」 :勾選以後所有的線程組都是順序執行的了。一般不勾選,讓所有 的線程組並發啟動。
「函數測試模式」 :勾選後會有詳細的請求記錄,消耗資源,影響客戶端性能。一般不勾選。
用戶定義的變量:全局變量,測試計劃上可以添加用戶定義的變量。一般添加一些系統常用的配置。如果測試過程中想切換環境,切換配置,一般不建議在測試計劃上添加變量
2.線程組:代表一定數量的並發用戶,它可以用來模擬並發用戶發送請求。實際的請求內容在Sampler中定義,它被線程組包含。可以在「測試計劃->添加->線程組」來建立它,然後在線程組面板里有幾個輸入欄:線程數、Ramp-Up Period(in seconds)、循環次數,其中Ramp-Up Period(in seconds)表示在這時間內創建完所有的線程。如有8個線程,Ramp-Up = 200秒,那麼線程的啟動時間間隔為200/8=25秒,這樣的好處是:一開始不會對伺服器有太大的負載。線程組是為模擬並發負載而設計。
(1)、thread group(線程組)
這個就是我們通常添加運行的線程。通俗的講一個線程組,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶。
(2)、setup thread group
一種特殊類型的ThreadGroup的,可用於執行預測試操作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試前進行定期線程組的執行;類似LoadRunner的init,測試開始時進行初始化的工作。
(3)、teardown thread group
一種特殊類型的ThreadGroup的,可用於執行測試後動作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試結束後執行定期的線程組;類似LoadRunnner的end,測試結束時進行回收工作。
3、取樣器(Sampler):模擬各種請求。所有實際的測試任務都由取樣器承擔,存在很多種請求。如:HTTP 、ftp請求等等。
關於http請求的的屬性參數說明:
1)名稱:用於標識一個sample。建議使用一個有意義的名稱
2)注釋:對於測試沒任何影響,僅用來記錄用戶可讀的注釋信息
3)伺服器名稱或IP:http請求發送的目標伺服器名稱或者IP位址,比如http://www.baidu.com
4)埠號:目標伺服器的埠號,默認值為80,可不填
5)協議:向目標伺服器發送http請求時的協議,http/https,大小寫不敏感,默認http
6)方法:發送http請求的方法(連結:http://www.cnblogs.com/imyalost/p/5630940.html)
7)Content encoding:內容的編碼方式(Content-Type=application/json;charset=utf-8)
8)路徑:目標的URL路徑(不包括伺服器地址和埠)
9)自動重定向:如果選中該項,發出的http請求得到響應是301/302,jmeter會重定向到新的界面
10)Use keep Alive:jmeter 和目標伺服器之間使用 Keep-Alive方式進行HTTP通信(默認選中)
11)Use multipart/from-data for HTTP POST :當發送HTTP POST 請求時,使用
12)Parameters、Body Data以及Files Upload的區別:
parameter是指函數定義中參數,而argument指的是函數調用時的實際參數
簡略描述為:parameter=形參(formal parameter), argument=實參(actual parameter)
3.在不很嚴格的情況下,現在二者可以混用,一般用argument,而parameter則比較少用
While defining method, variables passed in the method are called parameters.
當定義方法時,傳遞到方法中的變量稱為參數.
While using those methods, values passed to those variables are called arguments.
當調用方法時,傳給變量的值稱為引數.(有時argument被翻譯為「引數「)
4、Body Data指的是實體數據,就是請求報文裡面主體實體的內容,一般我們向伺服器發送請求,攜帶的實體主體參數,可以寫入這裡
5、Files Upload指的是:從HTML文件獲取所有有內含的資源:被選中時,發出HTTP請求並獲得響應的HTML文件內容後還對該HTML
進行Parse 並獲取HTML中包含的所有資源(圖片、flash等):(默認不選中)
如果用戶只希望獲取特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達式,只有能匹配指定正則表達式的URL指向資源會被下載
4、監聽器:負責收集測試結果,同時也被告知了結果顯示的方式。功能是對取樣器的請求結果顯示、統計一些數據(吞吐量、KB/S……)等。
5、邏輯控制器:允許自定義JMeter發送請求的行為邏輯,它與Sampler結合使用可以模擬複雜的請求序列。
6、循環控制器、事務控制器
6.2.事務控制器
作用: 事務控制器會生產一個額外的採樣器,用來統計該控制器子結點的所有時間。
在線程組下創建事務控制器
參數:
• Generate parent sample:(選中這個參數結果展示如下圖紅框,否則顯示為下圖藍框)
• Include duration of timer and pre-post processors in generated sample:選中這一項會統計定時器(timer)的時間,否則只統計採樣器(sample)的時間
創建sample 訪問首頁和註冊頁面
生成聚合報告
勾選
聚合報告中只有一項事務報告
7、斷言——檢查點
斷言(Assertions)可以用來判斷請求響應的結果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對於有效的測試是非常有用的。
8、前置處理器和後置處理器
Processors)和後置處理器(Post Processors)負責在生成請求之前和之後完成工作。前置處理器常常用來修改請求的設置,後置處理器則常常用來處理響應的數據。我們主要在動態關聯中用到後置處理器的正則表達式提取器。
Jmeter後端處理器之正則表達式
https://www.cnblogs.com/fengpingfan/p/4755411.html
9、定時器
定時器(Timer)負責定義請求之間的延遲間隔
三、Jmeter接口測試實例
1 添加線程組
線程組參數詳解:
- 線程數:虛擬用戶數。一個虛擬用戶占用一個進程或線程。設置多少虛擬用戶數在這裡也就是設置多少個線程數。
- Ramp-Up Period(in seconds)準備時長:設置的虛擬用戶數需要多長時間全部啟動。如果線程數為10,準備時長為2,那麼需要2秒鐘啟動10個線程,也就是每秒鐘啟動5個線程。
- 循環次數:每個線程發送請求的次數。如果線程數為10,循環次數為100,那麼每個線程發送100次請求。總請求數為10*100=1000 。如果勾選了「永遠」,那麼所有線程會一直發送請求,一到選擇停止運行腳本。
- Delay Thread creation until needed:直到需要時延遲線程的創建。
- 調度器:設置線程組啟動的開始時間和結束時間(配置調度器時,需要勾選循環次數為永遠)
持續時間(秒):測試持續時間,會覆蓋結束時間啟動延遲(秒):測試延遲啟動時間,會覆蓋啟動時間啟動時間:測試啟動時間,啟動延遲會覆蓋它。當啟動時間已過,手動只需測試時當前時間也會覆蓋它。結束時間:測試結束時間,持續時間會覆蓋它。
現在先試一個簡單的例子,後面再進行詳細的配置。
2 添加HTTP請求
這裡我用了聚合數據的新聞API:
接口文檔如上,在JMeter中填寫就是這個樣子:
Http請求主要參數詳解:
Web伺服器
協議:向目標伺服器發送HTTP請求協議,可以是HTTP或HTTPS,默認為HTTP
伺服器名稱或IP :HTTP請求發送的目標伺服器名稱或IP
埠號:目標伺服器的埠號,默認值為80,非必填項
Http請求
方法:發送HTTP請求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
路徑:目標URL路徑(URL中去掉伺服器地址、埠及參數後剩餘部分)
Content encoding :編碼方式,默認為ISO-8859-1編碼,也可配置為utf-8
下面的幾個多選框
自動重定向:如果選中該項,發出的http請求得到響應是301/302,jmeter會重定向到新的界面
Use keep Alive:jmeter 和目標伺服器之間使用 Keep-Alive方式進行HTTP通信(默認選中)
Use multipart/from-data for HTTP POST :當發送HTTP POST 請求時,使用
Parameters
parameter是指函數定義中參數
Body Data
實體數據,就是請求報文裡面主體實體的內容,一般我們向伺服器發送請求,攜帶的實體主體參數,可以寫入這裡
Files Upload
指的是:從HTML文件獲取所有有內含的資源:被選中時,發出HTTP請求並獲得響應的HTML文件內容後還對該HTML 進行Parse 並獲取HTML中包含的所有資源(圖片、flash等):(默認不選中)
如果用戶只希望獲取特定資源,可以在下方的Embedded URLs must match 文本框中填入需要下載的特定資源表達式,只有能匹配指定正則表達式的URL指向資源會被下載
3 添加查看結果樹
4 參數化
在這裡我們添加一個新的變量:
然後在之前的HTTP請求中調用,調用格式為${keji_type}:
啟動就會在結果樹中查看到相應的結果。
5 添加斷言
因為我們剛剛查找的是科技類的文章,所以我們來斷言,響應結果中是否有「科技」欄位。
6 添加斷言結果
7 添加聚合報告
存放性能測試報告,在每次測試之前需要點擊小掃把按鈕清除之前的調試結果。
聚合報告參數詳解:
- Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裡顯示的就是 Name 屬性的值
- #Samples:請求數——表示這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶疊代10次,那麼這裡顯示100
- Average:平均響應時間——默認情況下是單個 Request 的平均響應時間,當使用了 Transaction Controller 時,以Transaction 為單位顯示平均響應時間
- Median:中位數,也就是 50% 用戶的響應時間
- 90% Line:90% 用戶的響應時間
- Min:最小響應時間
- Max:最大響應時間
- Error%:錯誤率——錯誤請求數/請求總數
- Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數
KB/Sec:每秒從伺服器端接收到的數據量,相當於LoadRunner中的Throughput/Sec
一般而言,性能測試中我們需要重點關注的數據有: #Samples 請求數,Average 平均響應時間,Min 最小響應時間,Max 最大響應時間,Error% 錯誤率及Throughput 吞吐量。
這樣,我們就完成了一個完整HTTP接口的JMeter性能測試腳本編寫。
私信555 可以獲取全套Jmeter視頻教程和實戰及面試題Python自動化測試全套視頻資料免費領取