【JMeter系列-3】JMeter元件詳解之配置元件


JMeter提供了豐富的配置元件,常用的包括參數化配置元件、HTTP請求默認值、HTTP信息頭管理器、計數器等,這些配置元件用於設置默認值和變量,提供給後面的sampler(取樣器)使用。

1 CSV Data Set Config(參數化)

參數化配置元件(以下簡稱CSV)能夠在文件中讀取一行數據,根據特定的符號切割成一個或多個變量放入內存中。相比於JMeter函數助手中提供的 __CSVRead()、__StringFromFile()函數,CSV使用更加簡便。而且,CSV非常適合處理大量的數據,也適用於生成“隨機值”、“唯一值”這張的變量。
JMeter支持數據被雙引號括起,被雙引號括起的數據允許包含分隔符,例如:
a,b,“c,d”
這行數據被逗號分隔後將產生三個變量值,a、b、c,d
JMeter支持讀取具有標題行(標題行的內容是列名稱)的CSV文件,要啓用此功能,要將【Variable Names】留空,並且提供正確的分隔符。
在這裏插入圖片描述
參數詳解

參 數 描 述 必 須
Name 腳本中顯示的這個元件的描述性名稱
Filename 待讀取文件的名稱。可以寫入絕對路徑,也可以寫入相對路徑(相對於bin目錄),如果直接寫文件名,則該文件要放在bin目錄中。對於分佈式測試,主機和遠程機中相應目錄下應該有相同的CSV文件
File Encoding 文件讀取時的編碼格式,不填則使用操作系統的編碼格式
Ignore first line 是否忽略首行,如果csv文件中沒有表頭,則選擇false
Variable Names 變量名列表,多個變量名之間必須用分隔符分隔。如果該項爲空,則文件首行會被讀取並解析爲列名列表
Delimiter 參數分隔符,將一行數據分隔成多個變量,默認爲逗號,也可以使用“\t”。如果一行數據分隔後的值比Vairable Names中定義的變量少,這些變量將保留以前的值(如果有值的話)
Allow quoted data? 是否允許變量使用雙引號,允許的話,變量將可以括在雙引號內,並且這些變量名可以包含分隔符
Recycle on EOF? 是否循環讀取csv文件內容,默認爲 true
Stop thread on EOF? 是否循環讀取csv文件內容,默認爲 true
Recycle on EOF? 當Recycle on EOF爲False時,停止線程,當Recycle on EOF爲True時,此項無意義,默認爲 false
Sharing mode 1、All threads(默認):一個線程組內,各個線程(用戶)唯一順序取值;2、current thread:一個線程組內,各個線程(用戶)各自順序取值;3、線程組各自獨立,但每個線程組內各個線程(用戶)唯一順序取值;

示例,注意【Sharing mode】爲All threads:
在這裏插入圖片描述
file.txt中內容:
在這裏插入圖片描述
添加【Debug Sampler】後,設置線程組線程數爲2,循環次數爲2,運行腳本
在這裏插入圖片描述
查看結果樹,4次運行結果依次是:
var1=a1 var2=b1 var3=c1
var1=a2 var2=b2 var3=c2
var1=a3 var2=b3 var3=c3
var1=a1 var2=b1 var3=c1
在這裏插入圖片描述
修改【Sharing mode】爲【Current thread group】後,運行結果不變,改爲【Current thread】,結果變爲:
var1=a1 var2=b1 var3=c1
var1=a2 var2=b2 var3=c2
var1=a1 var2=b1 var3=c1
var1=a2 var2=b2 var3=c2
以上結果說明,前兩種模式下,多個線程會互相影響,線程1讀取第一行數據後,線程2就會讀取第二行,線程1再次讀取時會讀取第三行,以此類推。第三種模式下,各個線程互不影響,只按自身的順序去讀取文件,例如線程1讀取第一行後,下次會讀取第二行,線程2也是如此。

2 HTTP Cookie Manager(cookie管理器)

cookie管理器有兩個功能:

  • 它像Web瀏覽器一樣存儲和發送cookie。如果有一個HTTP請求,並且響應中包含一個cookie,那麼cookie管理器會自動存儲該cookie,並將其用於將來對該特定網站的所有請求。每個JMeter線程都有自己的“cookie存儲區”。因此,測試使用cookie存儲會話信息的網站,每個JMeter線程都將有自己的會話。要注意的是,此類cookie不會出現在cookie管理器顯示中,但可以在【查看結果樹】中查看它們。
    JMeter會檢查接收到的cookie是否對URL有效,這意味着跨域cookie將不會被存儲。如果想要進行竊聽行爲或希望使用跨域cookie,需要定義jmeter屬性“CookieManager.check.cookies=false”。
    接收到的cookie可以存儲爲jmeter線程變量。要將cookies保存爲變量,請定義屬性“CookieManager.save.cookies=false=true”。此外,在存儲cookie名稱之前,它們的前綴是“COOKIE_”(這可以避免局部變量的意外損壞)要恢復到初始狀態,請定義屬性“CookieManager.name.prefix=”(一個或多個空格)。如果啓用,名爲TEST的cookie的值可以描述爲**${COOKIE_TEST}**。
  • 其次,我們可以手動將cookie添加到cookie管理器中。不過,這樣做的話,所有JMeter線程將共享cookie。這些cookie的失效時間將會很長。
    默認情況下,空值的cookie將會被忽略,可以通過設置JMeter配置文件來修改:CookieManager.delete_null_cookies=false,這也適用於手動定義的cookie,任何此類cookie在更新時都將從顯示中被刪除。cookie名稱必須是唯一的,如果用相同的名稱定義了第二個cookie,它將替換第一個。
    在這裏插入圖片描述
    如果一個sampler(取樣器)的作用域中有多個cookie管理器,則無法指定要使用哪個cookie管理器。另外,存儲在一個cookie管理器中的cookie對任何其他管理器都不可用,因此請小心使用多個cookie管理器。

cookie管理器參數詳解:

名稱 描述 必須
Name 腳本中顯示的這個元件的描述性名稱
Clear Cookies each Iteration 勾選此項後,每次執行主線程組循環時,都會清除所有服務器定義的cookie。在GUI中定義的任何cookie都不會被清除。
Cookie Policy cookie管理策略。“standard”適用於大部分情況。“ignoreCookies”等同於忽略cookieManger
User-Defined Cookies 使用自定義的cookie

3 HTTP Request Defaults

HTTP請求默認值,這個元件可以設置HTTP請求控制器使用的默認值。例如,圖中【服務器名稱或IP】項目內填入了【example.com】,後面的HTTP請求如果IP也是example.com的話,那麼只要將【服務器名稱或IP】留空,那麼這個字段將自動繼承HTTP請求默認值中的值。其他諸如【協議】、【端口號】、【路徑】等同此。
HTTP請求默認值可以極大地增強複用性,簡化腳本編寫。
在這裏插入圖片描述
在這裏插入圖片描述

4 HTTP Header Manager(信息頭管理器)

信息頭管理器,支持用戶添加或者重寫HTTP請求頭。JMeter支持多個信息頭管理器。多個信息頭條目合併成一個信息頭列表,跟隨http請求一併提交到服務端。
經過實測,總結出規則如下:

  1. 當有多個信息頭管理器,且不同的管理器內有名稱相同的信息頭條目存在時,順序靠前的管理器的信息頭條目會覆蓋後面的;
    在這裏插入圖片描述
    在這裏插入圖片描述
    例如上圖,運行後,查看結果樹:
    在這裏插入圖片描述
  2. 當只有一個信息頭管理器,但管理器內有名稱相同的信息頭條目時,會同時生效;
    將上面腳本中的HTTP信息頭管理器1禁用,再次運行腳本,查看結果樹:
    在這裏插入圖片描述

5 Counter(計數器)

計數器,可以在線程組任何位置創建,允許用戶配置起點、最大值和增量。配置後,計數器將從起點循環到最大值,然後重新開始,直到線程結束。
在這裏插入圖片描述
計數器參數詳解:

名稱 描述 必須
Name 腳本中顯示的這個元件的描述性名稱
Starting value 計數器的起始值,默認爲0
Increment 每次迭代計數器的增量,默認爲0,表示無增量
Maximum value 計數器最大值,到此值後將從起始值重新開始計數,默認爲LONG.MAX_VALUE
Number Format 可選格式,例如000將格式化爲001、002等。這將傳遞給decimalFormat,因此可以使用任何有效格式。如果在解釋格式時出現問題,則忽略該格式。[默認格式是使用long.toString()生成的]
Exported Variable Name 引用名稱,如果將它命名爲count,後面可以用${count}引用它,不建議用空字符串,雖然空值也可以使用
Track Counter Independently for each User 如果勾選此項,則計數器爲全局計數器(即,用戶1將獲得值“1”,用戶2將在第一次迭代時獲得值“2”)。如果選中,則每個用戶都有一個獨立的計數器。
Reset counter on each Thread Group Iteration 此選項僅在勾選【Track Counter Independently for each User】時可用,如果選中此選項,則計數器將重置爲每個線程組迭代的起始值。當計數器在循環控制器中時,這可能很有用。

實際工作中,計數器一般和邏輯控制器配合使用,例如下面的腳本:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
運行腳本,查看結果樹。分析一下這個運行結果:

  • 第1次循環,count=1,不滿足if控制器1條件,滿足if控制器2條件,執行了控制器2下的取樣器;
  • 第2次循環,count=2,不滿足if控制器1條件,滿足if控制器2條件,執行了控制器2下的取樣器;
  • 第3次循環,count=3,滿足if控制器1條件,也滿足if控制器2條件,執行了控制器1和控制器2下的取樣器;
  • 第4次循環,count=4,不滿足if控制器1條件,滿足if控制器2條件,執行了控制器2下的取樣器;
  • 第3次循環,count=5,不滿足if控制器1條件,也不滿足if控制器2條件,兩個if控制器下的取樣器都沒有執行;
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章