Jmeter性能測試配置


Jmeter檢查點/斷言

在上一章節中,我們通過調試腳本,通過人工驗證腳本可以完成業務功能,
但在性能測試中,我們希望能通過自動驗證腳本是否完成業務功能,在Jmeter
中我們可以通過檢查點,也就是斷言來實現自動驗證腳本的正確性。

斷言組件:
Jmeter通過斷言組件完成斷言、自動驗證的功能。
斷言組件通過獲取服務器響應數據,然后根據斷言規則去匹配響應數據;
正常匹配腳本不會出現任何問題或者提示,如果匹配不到,就會出現異常情況,
此時Jmeter就會判斷這個事務失敗,那么我們在察看結果樹中看到的請求名稱
是紅色字體。

通過右擊單個請求-添加--斷言,可 以看到Jmeter的斷言元件非常多,一
般常使用的是響應斷言(Response Assertion)。

響應斷言既是對服務器的響應數據進行規則匹配。

響應斷言界面如下:

響應斷言界面介紹:
名稱、注釋、Apply之前在講正則表達式提取器的時候介紹過,不做重復講解。
要測試的響應字段:針對響應數據的不同部分進行匹配,包含如下7個部分。
響應文本:服務器返回的響應文本內容,HTTP協議排除Header部分
Document(text):對文檔內容進行匹配。
URL樣本:匹配URL鏈接。
響應代碼:匹配響應代碼,如”200”。
響應信息:匹配響應信息,如"0K"。
Response Headers:匹配響應中的頭信息。
Ignore Status:一個請求有多個響應斷言,當第一個斷言設置該選項,那么如果第一個斷言失敗后,第二個斷言成功,事務還是成功狀態。
模式規則匹配:包含如下5個部分。
包括:響應內容包括需要匹配的內容,支持正則表達式。
匹配:響應內容要完全匹配需要匹配的內容,大小寫不區分,支持正則表達式。
Equals:響應內容要完全與需要匹配的內容相同,區分大小寫,不支持正則表達式
Substring:響應內容包含需要匹配的內容,區分大小寫,不支持正則表達式。
否:選擇Equals、Substring時匹配的是字符串,大小寫敏感,選擇此項類似降級。
要測試的模式:填入需要匹配的字符串或者正則表達式。

Jmeter事務

Jmeter能夠做到把每個請求統計成一個事務,但事務一般是用戶宏觀上的概
念,所以系統把多個請求統計成一個事務, 在Jmeter中可以通過邏輯控制器下的事務控制器來完成此要求。

邏輯控制器概念:
邏輯控制器可以控制采樣器(samplers)的執行順序。由此可知,控制器需要
和采樣器一起使用,否則控制器就沒有什么意義了。放在控制器下面的所有的采樣器都會當做一個整體,執行時也會一起被執行。

邏輯控制器分類:
a)控制測試計划執行過程中節點的邏輯執行順序,如:循環控制器(Loop
Controller)、如果控制器(If Controller)等;
b)對測試計划中的腳本進行分組、方便]Meter統計執行結果以及進行腳本的
運行時控制等,如:吞吐量控制器(Throughput Controller)、事務控制器
(Transaction Controller)等。

我們需要做Jmeter的事務操作,所以需要用到事務控制器。

事務控制器界面如下:

Generate parent sample:如果事務控制器下有多個采樣器(請求),勾選后,在察看結果樹中不僅可以看到事務控制器,還可以看到每個采樣器;並且事務控制器定義的事務是否成功取決於子事務是否都成功,任何一個失敗代表整個事務失敗。

Include duration of timer and per-post processors in generated sample:是否包括定時器、預處理和后期處理延遲的時間,選中這一項會統計定時器(timer)的時間,否則只統計采樣器(sample)的時間。

Jmeter集合點

在做性能測試過程中,我們會根據場景做狹義的並發,這個時候就需要用到
集合點,集合點能夠盡量讓虛擬用戶同一時刻發送請求,在Jmeter中集合點是通過定時器來完成的。

定時器概念:
Jmeter定時器用來控制取樣器的執行時機,有固定定時器,隨機定時器等。
要實現集合點,一般我們需要用到同步定時器來進行控制。

同步定時器(Synchronizing timer)概念:
同步定時器用來保證取樣器在同一-時刻向服務器發起負載,考慮到線程運行
的時間快慢與場景的需要,也提供了同步線程數量的設置。如下圖界面:

同步定時器界面字段說明:

名稱、注釋與之前元件一樣可以隨意設置。

Number of Simulated Users to Group by:
每次釋放的線程數量。如果設置為0,等同於設置為線程組中的線程數量。
Synchronizing timer僅作用於同-個JVM中的線程,所以,如果使用並發測試,確保"Number of Simultaneous Users to Group by"中設置的值不大於它所在線程組包含的用戶數。

Timeout in milliseconds:
如果設置為0,Timer將會等待線程數達到了" Number of Simultaneous Users to Group"中設置的值才釋放。如果大於0,那么如果超過Timeout in milliseconds中設置的最大等待時間[毫秒為單位)后還沒達到"Number of Simultaneous Users to Group"中設置的值,Timer將不再等待,釋放已到達的線程。
如果設置Timeout in milliseconds為0,且線程數量無法達到"Number of
Simultaneous Users to Group by"中設置的值,那么Test將無限等待, 除非手動終止。Timeout in milliseconds中設置的單位是毫秒。

同步定時器使用說明:
Synchronizing Timer是在每個sampler (采樣器)之前執行的,而不是
之后,不管這個定時器的位置放在sampler之后,還是之前,執行請求A和請
求B前都會執行同步定時器如下左圖所示:

當執行一個sampler之前時,和sampler處於相同作用域的定時器都會被執行;如果希望定時器僅應用於其中一個sampler,則把該定時器作為子節點加入,如上右圖定時器僅僅對請求B起作用,即僅在請求B執行前執行定時器,和請求A無關

Jmeter參數化

在做性能測試過程中,一般我們需要模擬多個用戶進行操作,為了滿足實際
場景,模擬真實的用戶行為,我們需要做到模擬的用戶帳號或其它信息都是不同的,這時我們就需要用到參數化。在Jmeter中, 配置元件可以解決此問題。

配置元件概念:
JMeter配置元件可以用來進行參數化、初始化默認值和變量、存儲服務器的
響應信息以及配置鏈接數據庫等。JMeter參數化一般使用配置元件中的CSV Data
Set Config或者JDBC Connection Configuration來進行參數化

CSV Data Set Config元件:
該元件可以用來讀取csv或dat文件的數據(一行一行讀取),然后通過設置
把讀取到的數據關聯到Jmeter中的變量保存。csv文件可以使用execl表格工具去進行編輯。

JDBC Connection Configuration元件:
該元件可以用來進行數據庫的連接,然后通過JDBC Request元件發送數據庫
請求數據庫中的表中的數據,再通過正則表達式提取器關聯到Jmeter中的變量保存。

CSV Data Set Config界面如下:

界面字段說明:
名稱、注釋與之前元件一樣可以隨意設置。
Filename:指保存信息的文件目錄,可以相對或者絕對路徑,相對路徑從Jmeter
的啟動目錄(***/bin)路徑。
File Encoding:文件編碼,默認為ANSI, 建議設置為utf-8,防止遇見亂碼情況。

Variable Names:參數名稱,每個名稱中間用分隔符分割,分隔符使用下面的“Delimitet”中定義的,默認用逗號隔開,與參數文件的參數對應。如果設置的參數
名稱多於參數文件中的參數,多余的參數取不到值;反之參數文件中的參數將沒有
參數對應。
Delimitet:定義分隔符,用於分隔文件中的參數,及上述Variable Names中定義的
參數名稱。
Allow Quoated data?:是否允許引用數據,設置為True,設置文件中的參數值都必
須用引號引起來,False則不需要
Recycle on EOF ?:遇到文件結束符時,是否從頭開始循環讀入,設置為True,則從
頭開始繼續循環
Stop Thread on EOF ?2:當Recycle on EOF設置為False並且Stop Thread on EOF為True,則讀完csv文件中的記錄后,停止運行
Sharing Mode:參數文件共享模式,有三個設置,說明如下:
All threads:參數文件對所有線程共享,包含同一測試計划中的不同線程組。
Current thread group:只對當前線程組中的線程共享。
Current thread:僅當前線程獲取。

在實際性能測試過程中,比如測試發帖的場景,由於每次發送相同的內容會被論壇系統屏蔽,這時我們根據之前的方式做成參數化,如果我們希望每次發帖的內容是隨機的,這時可以借助]meter隨機數函數。

Jmeter隨機數函數使用如下:
1、點擊菜單欄-選項--函數助手對話框--“選擇一個 功能”下拉框選擇_ Random String,生成一個隨機字符串;
2、設置Rondom String length,即設置生成隨機字符串的長度;
3、設置Chars to use for random string generation,指定用哪些字符作為種子進行隨機生成,支持中文、數字、字母等;
4、Name of variable in which to store the result (optional):函數名稱(只是用來存儲變量的名稱,不可以${名稱}使用), 可選項,如果填寫,運行腳本后可在Debug Sampler中看到這個變量的值;
5、點擊生成按鈕,自動生成一個字符串, 把該字符串替換到需要用到隨機數參
數的地方即可。

在性能測試過程中,經常會遇見腳本開發時與測試執行時的服務器地址不一樣,如果我們把服務器地址寫死,修改起來就很麻煩,為了解決環境切換修改腳本的問題,我們常把訪問地址進行參數化,當執行性能測試的環境變化后,我們只需要把參數對應的值改動一下就可以了。
右擊線程組--配置文件--用戶定義的變量.打開界面如下:

配置好URL和PORT變量后,在其它元件中使用${URL}引用變量即可。

如果是手動開發Jmeter腳本,在GUI界面添加多個請求的時候,由於都是測試同一服務器,所以每個請求編寫的過程中一些公共的部分比如服務器IP、端口等每次都需要重新寫一遍,這個時候可以使用Jmeter提供的HTTP請求默認值,把重復的內容分離出來,只需要定義一次。
HTTP請求默認值使用:
添加方法:線程組-->右鍵添加-->配置元件--> HTTP請求默認值。
和采樣器的HTTP請求界面大致相同,配置好之后,之后寫HTTP請求不需要填寫該部分,采用該處的默認值。如下圖所示:


免責聲明!

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



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