JMeter配置元件詳解
1 CSV Data Set Config(參數(shù)化)
參數(shù)化配置元件(以下簡稱CSV)能夠在文件中讀取一行數(shù)據(jù),根據(jù)特定的符號切割成一個或多個變量放入內(nèi)存中。相比于JMeter函數(shù)助手中提供的 __CSVRead()、__StringFromFile()函數(shù),CSV使用更加簡便。而且,CSV非常適合處理大量的數(shù)據(jù),也適用于生成“隨機(jī)值”、“唯一值”這張的變量。
JMeter支持?jǐn)?shù)據(jù)被雙引號括起,被雙引號括起的數(shù)據(jù)允許包含分隔符,例如:a,b,"c,d"
這行數(shù)據(jù)被逗號分隔后將產(chǎn)生三個變量值,a、b、c,d
JMeter支持讀取具有標(biāo)題行(標(biāo)題行的內(nèi)容是列名稱)的CSV文件,要啟用此功能,要將【Variable Names】留空,并且提供正確的分隔符。
參數(shù)詳解:
參 數(shù) | 描 述 | 必 須 |
---|---|---|
Name | 腳本中顯示的這個元件的描述性名稱 | 是 |
Filename | 待讀取文件的名稱。可以寫入絕對路徑,也可以寫入相對路徑(相對于bin目錄),如果直接寫文件名,則該文件要放在bin目錄中。對于分布式測試,主機(jī)和遠(yuǎn)程機(jī)中相應(yīng)目錄下應(yīng)該有相同的CSV文件 | 是 |
File Encoding | 文件讀取時的編碼格式,不填則使用操作系統(tǒng)的編碼格式 | 否 |
Ignore first line | 是否忽略首行,如果csv文件中沒有表頭,則選擇false | 是 |
Variable Names | 變量名列表,多個變量名之間必須用分隔符分隔。如果該項(xiàng)為空,則文件首行會被讀取并解析為列名列表 | 否 |
Delimiter | 參數(shù)分隔符,將一行數(shù)據(jù)分隔成多個變量,默認(rèn)為逗號,也可以使用“\t”。如果一行數(shù)據(jù)分隔后的值比Vairable Names中定義的變量少,這些變量將保留以前的值(如果有值的話) | 是 |
Allow quoted data? | 是否允許變量使用雙引號,允許的話,變量將可以括在雙引號內(nèi),并且這些變量名可以包含分隔符 | 否 |
Recycle on EOF? | 是否循環(huán)讀取csv文件內(nèi)容,默認(rèn)為 true | 是 |
Stop thread on EOF? | 是否循環(huán)讀取csv文件內(nèi)容,默認(rèn)為 true | 是 |
Recycle on EOF? | 當(dāng)Recycle on EOF為False時,停止線程,當(dāng)Recycle on EOF為True時,此項(xiàng)無意義,默認(rèn)為 false | 是 |
Sharing mode | 1、All threads(默認(rèn)):一個線程組內(nèi),各個線程(用戶)唯一順序取值;2、current thread:一個線程組內(nèi),各個線程(用戶)各自順序取值;3、線程組各自獨(dú)立,但每個線程組內(nèi)各個線程(用戶)唯一順序取值; | 是 |
示例,注意【Sharing mode】為All threads:
file.txt中內(nèi)容:
添加【Debug Sampler】后,設(shè)置線程組線程數(shù)為2,循環(huán)次數(shù)為2,運(yùn)行腳本
查看結(jié)果樹,4次運(yùn)行結(jié)果依次是:
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】后,運(yùn)行結(jié)果不變,改為【Current thread】,結(jié)果變?yōu)椋?/p>
var1=a1 var2=b1 var3=c1
var1=a2 var2=b2 var3=c2
var1=a1 var2=b1 var3=c1
var1=a2 var2=b2 var3=c2
以上結(jié)果說明,前兩種模式下,多個線程會互相影響,線程1讀取第一行數(shù)據(jù)后,線程2就會讀取第二行,線程1再次讀取時會讀取第三行,以此類推。第三種模式下,各個線程互不影響,只按自身的順序去讀取文件,例如線程1讀取第一行后,下次會讀取第二行,線程2也是如此。
2 HTTP Cookie Manager(cookie管理器)
cookie管理器有兩個功能:
它像Web瀏覽器一樣存儲和發(fā)送cookie。如果有一個HTTP請求,并且響應(yīng)中包含一個cookie,那么cookie管理器會自動存儲該cookie,并將其用于將來對該特定網(wǎng)站的所有請求。每個JMeter線程都有自己的“cookie存儲區(qū)”。因此,測試使用cookie存儲會話信息的網(wǎng)站,每個JMeter線程都將有自己的會話。要注意的是,此類cookie不會出現(xiàn)在cookie管理器顯示中,但可以在【查看結(jié)果樹】中查看它們。
JMeter會檢查接收到的cookie是否對URL有效,這意味著跨域cookie將不會被存儲。如果想要進(jìn)行竊聽行為或希望使用跨域cookie,需要定義jmeter屬性“CookieManager.check.cookies=false”。
接收到的cookie可以存儲為jmeter線程變量。要將cookies保存為變量,請定義屬性“CookieManager.save.cookies=false=true”。此外,在存儲cookie名稱之前,它們的前綴是“COOKIE_”(這可以避免局部變量的意外損壞)要恢復(fù)到初始狀態(tài),請定義屬性“CookieManager.name.prefix=”(一個或多個空格)。如果啟用,名為TEST的cookie的值可以描述為**${COOKIE_TEST}**。
其次,我們可以手動將cookie添加到cookie管理器中。不過,這樣做的話,所有JMeter線程將共享cookie。這些cookie的失效時間將會很長。
默認(rèn)情況下,空值的cookie將會被忽略,可以通過設(shè)置JMeter配置文件來修改:CookieManager.delete_null_cookies=false,這也適用于手動定義的cookie,任何此類cookie在更新時都將從顯示中被刪除。cookie名稱必須是唯一的,如果用相同的名稱定義了第二個cookie,它將替換第一個。
如果一個sampler(取樣器)的作用域中有多個cookie管理器,則無法指定要使用哪個cookie管理器。另外,存儲在一個cookie管理器中的cookie對任何其他管理器都不可用,因此請小心使用多個cookie管理器。
cookie管理器參數(shù)詳解:
名稱 | 描述 | 必須 |
---|---|---|
Name | 腳本中顯示的這個元件的描述性名稱 | 否 |
Clear Cookies each Iteration | 勾選此項(xiàng)后,每次執(zhí)行主線程組循環(huán)時,都會清除所有服務(wù)器定義的cookie。在GUI中定義的任何cookie都不會被清除。 | 否 |
Cookie Policy | cookie管理策略?!皊tandard”適用于大部分情況?!癷gnoreCookies”等同于忽略cookieManger | 是 |
User-Defined Cookies | 使用自定義的cookie | 否 |
3 HTTP Request Defaults
HTTP請求默認(rèn)值,這個元件可以設(shè)置HTTP請求控制器使用的默認(rèn)值。例如,圖中【服務(wù)器名稱或IP】項(xiàng)目內(nèi)填入了【example.com】,后面的HTTP請求如果IP也是example.com的話,那么只要將【服務(wù)器名稱或IP】留空,那么這個字段將自動繼承HTTP請求默認(rèn)值中的值。其他諸如【協(xié)議】、【端口號】、【路徑】等同此。
HTTP請求默認(rèn)值可以極大地增強(qiáng)復(fù)用性,簡化腳本編寫。
4 HTTP Header Manager(信息頭管理器)
信息頭管理器,支持用戶添加或者重寫HTTP請求頭。JMeter支持多個信息頭管理器。多個信息頭條目合并成一個信息頭列表,跟隨http請求一并提交到服務(wù)端。
經(jīng)過實(shí)測,總結(jié)出規(guī)則如下:
當(dāng)有多個信息頭管理器,且不同的管理器內(nèi)有名稱相同的信息頭條目存在時,順序靠前的管理器的信息頭條目會覆蓋后面的;
例如上圖,運(yùn)行后,查看結(jié)果樹:
當(dāng)只有一個信息頭管理器,但管理器內(nèi)有名稱相同的信息頭條目時,會同時生效;
將上面腳本中的HTTP信息頭管理器1禁用,再次運(yùn)行腳本,查看結(jié)果樹:
?
5 Counter(計(jì)數(shù)器)
計(jì)數(shù)器,可以在線程組任何位置創(chuàng)建,允許用戶配置起點(diǎn)、最大值和增量。配置后,計(jì)數(shù)器將從起點(diǎn)循環(huán)到最大值,然后重新開始,直到線程結(jié)束。
計(jì)數(shù)器參數(shù)詳解:
名稱 | 描述 | 必須 |
---|---|---|
Name | 腳本中顯示的這個元件的描述性名稱 | 是 |
Starting value | 計(jì)數(shù)器的起始值,默認(rèn)為0 | 否 |
Increment | 每次迭代計(jì)數(shù)器的增量,默認(rèn)為0,表示無增量 | 否 |
Maximum value | 計(jì)數(shù)器最大值,到此值后將從起始值重新開始計(jì)數(shù),默認(rèn)為LONG.MAX_VALUE | 否 |
Number Format | 可選格式,例如000將格式化為001、002等。這將傳遞給decimalFormat,因此可以使用任何有效格式。如果在解釋格式時出現(xiàn)問題,則忽略該格式。[默認(rèn)格式是使用long.toString()生成的] | 否 |
Exported Variable Name | 引用名稱,如果將它命名為count,后面可以用${count}引用它,不建議用空字符串,雖然空值也可以使用 | 否 |
Track Counter Independently for each User | 如果勾選此項(xiàng),則計(jì)數(shù)器為全局計(jì)數(shù)器(即,用戶1將獲得值“1”,用戶2將在第一次迭代時獲得值“2”)。如果選中,則每個用戶都有一個獨(dú)立的計(jì)數(shù)器。 | 否 |
Reset counter on each Thread Group Iteration | 此選項(xiàng)僅在勾選【Track Counter Independently for each User】時可用,如果選中此選項(xiàng),則計(jì)數(shù)器將重置為每個線程組迭代的起始值。當(dāng)計(jì)數(shù)器在循環(huán)控制器中時,這可能很有用。 | 否 |
實(shí)際工作中,計(jì)數(shù)器一般和邏輯控制器配合使用,例如下面的腳本:
運(yùn)行腳本,查看結(jié)果樹。分析一下這個運(yùn)行結(jié)果:
- 第1次循環(huán),count=1,不滿足if控制器1條件,滿足if控制器2條件,執(zhí)行了控制器2下的取樣器;
- 第2次循環(huán),count=2,不滿足if控制器1條件,滿足if控制器2條件,執(zhí)行了控制器2下的取樣器;
- 第3次循環(huán),count=3,滿足if控制器1條件,也滿足if控制器2條件,執(zhí)行了控制器1和控制器2下的取樣器;
- 第4次循環(huán),count=4,不滿足if控制器1條件,滿足if控制器2條件,執(zhí)行了控制器2下的取樣器;
- 第3次循環(huán),count=5,不滿足if控制器1條件,也不滿足if控制器2條件,兩個if控制器下的取樣器都沒有執(zhí)行;
到此這篇關(guān)于JMeter配置元件詳解的文章就介紹到這了,更多相關(guān)JMeter 元件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Spring MVC同名參數(shù)綁定問題的解決方法
Spring MVC中的參數(shù)綁定還是蠻重要的,最近在使用中遇到了同名參數(shù)綁定的問題,想著總結(jié)分享出來,下面這篇文章主要給大家介紹了關(guān)于Spring MVC同名參數(shù)綁定問題的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08Netty分布式高性能工具類FastThreadLocal和Recycler分析
這篇文章主要為大家介紹了Netty分布式高性能工具類FastThreadLocal和Recycler分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03SpringBoot使用SensitiveWord實(shí)現(xiàn)敏感詞過濾
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何使用SensitiveWord實(shí)現(xiàn)敏感詞過濾功能,文中示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01