如何正確使用JMeter性能測試?緊扣面試實際要求


前段時間專門挑了一段時間在准備面試。經過兩次面試后,有一些比較深刻的認識。對於企業要求來說,除了對專業理論知識考究之外,對測試工具這塊也是看重的

一、使用JMeter測試快速入門

1、線程組是什么

進程: 一個正在執行的程序對應一個進程

線程: 一個進程有多個執行線程 線

程組: 按照線程性質對線程分組。查看任務管理器(愛奇藝有多個)

三者關系: 一個進程有多個線程組,一個線程組有多個線程

測試計划—線程組—線程組屬性中的線程數
並發執行:多個線程同時執行,特點:執行結束的順序與開始的順序不一致
順序執行:按照線程的啟動順序挨個執行
默認情況下,線程組中的線程是並發執行
每一個線程都要執行組內的http請求
設置線程組順序執行:勾選測試計划中的(獨立運行每個線程組)
線程組用來模擬用戶的並發訪問

創建線程組

線程組主要包含三個參數:

線程數、准備時長(Ramp-Up Period(in seconds))、循環次數。

線程數:

虛擬用戶數。一個虛擬用戶占用一個線程。設置多少虛擬用戶數在這里也就是設置多少個線程數。

准備時長(秒):

設置的虛擬用戶數需要多長時間全部啟動。如果線程數為20 ,准備時長為10 ,那么需要10秒鍾啟動20個線程。也就是每秒鍾啟動2個線程。

循環次數:

每個線程發送請求的次數。如果線程數為20 ,循環次數為100 ,那么每個線程發送100次請求。總請求數為20*100=2000 。如果勾選了“永遠”,那么所有線程會一直發送請求,一直到選擇停止運行腳本。

調度器

設置線程組啟動的開始時間和結束時間(配置調度器時,需要勾選循環次數為永遠)

持續時間(秒)

測試持續時間,會覆蓋結束時間

啟動延遲(秒)

測試延遲啟動時間,會覆蓋啟動時間

啟動時間

測試啟動時間,啟動延遲會覆蓋它。當啟動時間已過,手動只需測試時當前時間也會覆蓋它。

結束時間

測試結束時間,持續時間會覆蓋它。

創建http請求

見得最多,所以我們着重講解:

指定請求域名,請求路徑

接口文件講解

設置對應的查看內容

注意:如果監聽器中有jp@gc開頭的,都是第三方插件

Sample:每個請求的序號 Start Time:每個請求開始時間 Thread Name:每個線程的名稱 Label:Http請求名稱 Sample Time:每個請求所花時間,單位毫秒 Status:請求狀態,如果為勾則表示成功,如果為叉表示失敗。 Bytes:請求的字節數 樣本數目:也就是上面所說的請求個數,成功的情況下等於你設定的並發數目乘以循環次數 平均:每個線程請求的平均時間 最新樣本:表示服務器響應最后一個請求的時間 偏離:服務器響應時間變化、離散程度測量值的大小,或者,換句話說,就是數據的分布。

查看結果樹

  • 請求的數據展示(請求頭信息,請求參數,)

  • 響應的數據展示(響應碼,響應頭,) 

通過察看結果樹,我們可以看到每個請求的結果,其中紅色的是出錯的請求,綠色的為通過。

Thread Name:線程組名稱

Sample Start: 啟動開始時間

Load time:加載時長

Latency:等待時長

Size in bytes:發送的數據總大小

Headers size in bytes:發送數據的其余部分大小

Sample Count:發送統計

Error Count:交互錯誤統計

Response code:返回碼

Response message:返回信息

Response headers:返回的頭部信息

聚合報告參數說明

lable:對應每一個http請求,顯示的是http請求的Name,如百度http請求name為baidu

#Samples:表示這一次的測試中一共發出了多少請求,如上圖所示,sougou和baidu的http請求每個都發出30個請求

Average:平均響應時間,指的是所有的請求的平均響應時間,如上圖的30個請求的總的響應時間除以30得出的平均響應時間,默認的情況下是單個請求的平均響應時間,但當使用了“事務控制器”時,則以事物為單位顯示平均響應時間

Median:中位數,也就是50%用戶的響應時間

90%Line:90%用戶的響應時間

Min:最小響應時間

Max:最大的響應時間

Error%:本次測試中出現錯誤的請求的數量/請求的總數,如上圖所示,本次的測試中,sougou的http請求66.6%的請求出錯,而baidu的請求則沒有出錯的請求

Throughput:吞吐量,默認情況下表示每秒完成的請求數,如上圖所示,每秒完成的請求數分別為6.6個每秒,6.2個每秒

Recived KB/Sec:每秒從服務器端接收到的數據量,以kb為計算的單位




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

掌握:平均時間、錯誤率、吞吐量。

圖形結果

作用: 通過圖形展示出本次性能測試數據的分布。 圖形結果一般作為聚合報告的分析輔佐

樣本數目:總共發送到服務器的請求數。

最新樣本:代表時間的數字,是服務器響應最后一個請求的時間。

吞吐量:服務器每分鍾處理的請求數。

平均值:總運行時間除以發送到服務器的請求數。

中間值:有一半的服務器響應時間低於該值而另一半高於該值。

偏離:表示服務器響應時間變化、離散程度測量值的大小。

二、JMeter主要組件介紹

測試計划

1.測試計划就是一個完整的場景

2.“獨立運行每個線程組” :勾選以后所有的線程組都是順序執行的了。一般不勾選,讓所有 的線程組並發啟動。

3.“函數測試模式” :勾選后會有詳細的請求記錄,消耗資源,影響客戶端性能。一般不勾選。

4.用戶定義的變量:全局變量,測試計划上可以添加用戶定義的變量。一般添加一些系統常用的配置。如果測試過程中想切換環境,切換配置,一般不建議在測試計划上添加變量

線程組

(1)thread group(線程組)

這個就是我們通常添加運行的線程。通俗的講一個線程組,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶。 

(2)setup thread group

一種特殊類型的ThreadGroup的,可用於執行預測試操作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試前進行定期線程組的執行;類似LoadRunner的init,測試開始時進行初始化的工作。

(3)teardown thread group

一種特殊類型的ThreadGroup的,可用於執行測試后動作。這些線程的行為完全像一個正常的線程組元件。不同的是,這些類型的線程執行測試結束后執行定期的線程組;類似LoadRunnner的end,測試結束時進行回收工作。

取樣器(Http請求)

關於http請求的的屬性參數說明:

1)名稱:用於標識一個sample。建議使用一個有意義的名稱

2)注釋:對於測試沒任何影響,僅用來記錄用戶可讀的注釋信息

3)服務器名稱或IP:http請求發送的目標服務器名稱或者IP地址,比如http://www.baidu.com

4)端口號:目標服務器的端口號,默認值為80,可不填

5)協議:向目標服務器發送http請求時的協議,http/https,大小寫不敏感,默認http

6)方法:發送http請求的方法(鏈接:http://www.Tester .com//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的區別:

1.parameter是指函數定義中參數,而argument指的是函數調用時的實際參數

2.簡略描述為: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指向資源會被下載

監聽器

監聽器(Listener)負責收集測試結果,同時也被告知了結果顯示的方式。我們常用的包括:聚合報告、查看結果樹、用表格查看結果,都支持將結果數據寫入文件。其他的添加上去看看就行。聚合報告前面我們介紹過,后面是查看結果樹和用表格查看結果的截圖。

循環控制器

事務控制器

作用: 事務控制器會生產一個額外的采樣器,用來統計該控制器子結點的所有時間。

在線程組下創建事務控制器

參數:

  • Generate parent sample:(選中這個參數結果展示如下圖紅框,否則顯示為下圖藍框)
  • Include duration of timer and pre-post processors in generated sample:選中這一項會統計定時器(timer)的時間,否則只統計采樣器(sample)的時間

創建 sample 訪問首頁和注冊頁面

生成聚合報告

勾選

聚合報告中只有一項事務報告

斷言---檢查點

斷言(Assertions)可以用來判斷請求響應的結果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對於有效的測試是非常有用的。

兩個重要斷言:響應斷言和JSONAssertion

響應斷言:

JSON斷言:

前置處理器和后置處理器

前置處理器(Pre Processors)和后置處理器(Post Processors)負責在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設置,后置處理器則常常用來處理響應的數據。我們主要在動態關聯中用到后置處理器的正則表達式提取器。

定時器

定時器(Timer)負責定義請求之間的延遲間隔

 

三、JMeter組件參數化

1、CSV Data Set Config:CSV數據控件

使用場景: 適合參數范圍比較大的時候,可以方便用戶隨時修改參數數據。使用最多的就是參數化用戶名和密碼登錄系統。

操作步驟

 

在指定路徑下新建一個文本文檔,填寫多條內容

 

2、通過函數助手

使用場景: jmeter自帶的函數處理,比如:隨機數,可用於固定字符+隨機數,修改傳入參數的值,函數助手的底層都是java封裝的方法。

操作步驟

1、點擊 選項–>函數助手 調出函數助手對話框
2、選擇 _CSVRead 函數(下圖第一個框)
3、函數參數:
1)第一個參數:填寫文件路徑。
2)第二個參數:文件列號是從0開始的,第一列0、第二列1、第三列2、依次類推,然后點擊【生成】按鈕,則會自動生成我們需要的參數化函數。
3) 復制生成的參數化函數, copy過程需要使用的地方即可。
4) _Random函數是從某數據段隨機讀取數據替換參數,當需要添加多條數據記錄且某些字段需要唯一性時使用。

3、用戶自定義變量

使用場景: 一般可以適用於在測試計划中不經常變化的參數設置,如host、端口號、url等;而且用戶自定義變量是在配置元件中的。

操作步驟

(1)添加用戶自定義變量功能模塊

(2)配置用戶自定義變量參數值

這里以配置不同服務器地址和端口為例:

(3)配置HTTP請求中參數值或消息體數據中參數化字段

 

當發送請求服務器地址發生改變時,只需要更改服務器參數化值即可向不同的服務器發送請求。當然,用戶自定義變量也可以來參數化登陸用戶、交易金額、賬戶等場景。

四、JMeter正則表達式提取

運用Jmeter正則提取器,可以從請求的響應結果中取到需要的內容,從而實現關聯。關聯是請求與請求之間存在數據依賴關系,需要從上一個請求獲取下一個請求需要回傳回去的數據
正則表達式(regular expression) 描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。 

 

構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

正則表達式提取的相關設置

說明:

(1)引用名稱:下一個請求要引用的參數名稱,如填寫title,則可用${title}引用它。

(2)正則表達式: ():括起來的部分就是要提取的。 .:匹配任何字符串。 +:一次或多次。 ?:不要太貪婪,在找到第一個匹配項后停止。

(3)模板:用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等,表示解析到的第幾個值給title。如:$1$表示解析到的第1個值

(4)匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0

(5)缺省值:如果參數沒有取得到值,那默認給一個值讓它取。

案例: api接口

 

好文推薦

 

軟件測試人員必讀的經典書籍(附電子書),前阿里大佬給我推薦...

 

月薪3萬的大廠測試工程師裸辭3個月,送外賣謀生背后的真實感悟

 

測試行業工作4年了,從只會“點點點”到了現在的測試開發,年薪30W+,還好當時沒有放棄

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM