如何正確使用JMeter性能測試?緊扣面試實際要求(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:返回的頭部信息
聚合報告參數說明
掌握:平均時間、錯誤率、吞吐量。
圖形結果
作用:?通過圖形展示出本次性能測試數據的分布。 圖形結果一般作為聚合報告的分析輔佐
樣本數目:總共發送到服務器的請求數。
最新樣本:代表時間的數字,是服務器響應最后一個請求的時間。
吞吐量:服務器每分鐘處理的請求數。
平均值:總運行時間除以發送到服務器的請求數。
中間值:有一半的服務器響應時間低于該值而另一半高于該值。
偏離:表示服務器響應時間變化、離散程度測量值的大小。
二、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
1表示解析到的第1個值
(4)匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0
(5)缺省值:如果參數沒有取得到值,那默認給一個值讓它取。
案例:?api接口
題外話
MySQL Postman Shell 壓力測試 自動化測試
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。