jmeter中一個變量獲取后對應多個值,然后在后面調用這個變量,同時遍歷所有值的方法(for each的用法) 另附幾種復雜控制器


例如,我有個變量member_id包含7個值,還有cc_file有5個值

我們有這樣一個場景,7個學生訪問這5個文件,且全部訪問

1、提取7個學生id

訪問http

提取id

其中match number為-1,是指提取所有的值,保存為變量member_id

2、獲取5個file的id

 

提取所有id並保存成cc_file

 

然后用兩個嵌套循環即可

首先使用for each循環控制器時,要弄清楚這幾個選項的意思

輸入變量前綴,就是調用的變量名——調用后jmeter 會填充后綴,例子中就是member_ids_1為什么是下划線后面跟着1,因為勾選了下面的框。。

 Input Variable Prefix:輸入變量前綴,本例中為:member_ids
Output variable name:輸出變量名稱,提供給其它控件引用 
Start index for loop(exclusive):循環開始的索引(默認從0開始,如果填寫是2,實際是從2+1個開始執行) 
End index for loop(inclusive):循環結束的索引(默認從0開始,如果填寫是2,實際是從2+1個開始執行) 
Add”_”before number:輸入變量名稱中是否使用"_"進行間隔。 

 

 

 

 

 

 

我把翻譯當原創,實在是使用心得,貼出交流,與君共勉。

 


 

1、ForEach Controller(遍歷循環控制器)

 


 

 

 

Name:遍歷循環控制器,名稱,隨意;

 

Comments:注釋;

 

Input variable prefix:入參前綴;

 

Start index for loop(exclusive):循環變量起點,為0(第一個元素在起始索引+1),所以是從1開始取值,如果,正則表達式沒有提取到任何參數匹配,則不會運行任何樣本sampler;

 

End index for loop(inclusive):循環變量終點,如果variable_matchNr=10,寫10,取到第10個,寫11,沒有11,則不取,寫9則只取到編號為9的那個參數,取值大於輸出參數時,不會影響執行下一步操作;

 

Out variable name:輸出變量名稱,可以直接引用${variable name}

 

Add"_"before number?:變量前綴是否添加_作為分隔符;

 

舉例(查詢天氣預報):場景使用,查詢出某一個城市,有多個城市代碼,然后查詢出每個地區的天氣情況,這時就需要遍歷每一個城市代碼;

 


 

 

 

正則表達式提取所有的citycode,

 

Template:模板,$1$ 對應一個(.+?)表達式,Match No.(0 for Random):匹配規則,-1所有,0隨機,1第一個;

 


 

 

 

可以通過debug調試結果得知總數citycode_matchNr=20,

 


 

 

 

入參輸入citycode_ 自帶下划_分隔符,就不需要勾選Add“_”.。?,

 

開始數是從(0+1)開始,到20結束,那么取值citycode_1-20輸出給Recitycode;

 


 

 

 

${Recitycode}就會得到20條citycode數據進行遍歷:

 

 

 


 

2、If Controller 如果控制器

 


 

 

 

Name:如果控制器,命名隨意;、

 

Comments:注釋

 

Condition(default Javascript):判斷條件,默認javascript腳本,

 

Interpret Condition as Variable Expression?:

 

勾選,使用javascript腳本、函數表達式來設置條件,如${_javascript(8==8)},返回為true則執行;

 

不勾,使用變量表達式來設置條件,如"${variable}"=="xxx"、${variable}==數字,返回true則執行;

 

Evaluate for all children?:判斷條件是否針對所有的子節點,默認不勾選。只在if入口判斷一次;

 

3、Loop Controller 循環控制器

 


 

 

 

Name:循環控制器名稱,隨意;

 

Comments:

 

Loop Count:循環次數,輸入多少次就做少次

 

Forever:勾選,則永遠循環,

 

 

 

再解釋一遍這個配置元件與循環控制器搭配使用:

 

Name:元件名稱,隨意,保持默認就好

 

Comments:

 

Configure the CSV data source:配置元件數據源

 

FileName:名稱,絕對路徑;如C:\program file\index.csv,相對路徑,文件放在腳本同一路徑

 

File encoding:文件編碼,如果參數文件有中文保存又不是utf-8,此處填gbk,如果參數文件保存為utf-8編碼,默認為空或utf-8

 

Variable names (comma-delimited):參數文件有多少列,就給多少變量名稱一一對應即可

 

Ignore first line(only used if variable names is not empty):默認false,選擇true,不讀文件第一行;

 

Delimiter(use '\t' for tab):分隔符,默認英文逗號,

 

Allow quotel data?:是否允許引用數據,未解其意,如果參數是引用參數“3,2,2”,就取引號的值;

 

Recycle on EOF?:到了文件尾是否循環,True—繼續從文件第一行開始讀取,False—不再循環,當False讀完即止,stop thrad on EOF?為false,如果線程數大於參數行數4>3,則取到第3行,線程停止,不會執行下一個請求;

 

Stop thread on EOF?:到了文件尾是否停止線程,True—停止線程,False—不停止,注:當Recycle on EOF設置為True時,此項設置無效。

 

Sharing mode:共享模式,All threads –所有線程,Current thread group—當前線程組,Current thread—當前線程。這個地方和[url=]LoadRunner[/url]中的迭代取之相反,經試驗得出來的結果是:

 

Ø All threads:[url=]測試[/url]計划中所有線程,假如說有線程1到線程n (n>1),線程1取了一次值后,線程2取值時,取到的是csv文件中的下一行,即與線程1取的不是同一行。

 

Ø Current thread group:當前線程組,假設有線程組A、線程組B,A組內有線程A1到線程An,線程組B內有線程B1到線程Bn。取之情況是:線程A1取到了第1行,線程A2取第2行,現在B1取第1行,線程B2取第2行。

 

Ø Current thread:當前線程。假設測試計划內有線程1到線程n (n>1),則線程1取了第1行,線程2也取第1行。

 


 

4、Once Only Controller 僅一次控制器( 理解就是它不在邏輯控制器之內,任何循環的取樣器,在它之下只執行一次,線程多少個就執行多少次)

 

顧名思義,一個線程只會執行一次,多個線程就執行多次;

 

5、Switch Controller 條件控制器

 


 

 

 

Switch Value:默認為空,取其下第一個取樣器,可以理解成編號,如輸入0,其下的第一個取樣器為0,順序依此類推;如果指定的編號超出了下面的節點數或者不指定,則運行第0個取樣器,另外可以指定取樣器的名稱,匹配注意大小寫及空格,如果匹配不上,則不運行取樣器;

 

6、RandomController 隨機控制器

 


 

Name:隨機控制器,名稱隨意;

 

Comments:注釋;

 

Ignore sub-controller blocks:忽略子控制器模塊

 

7、Transaction Controller 事物控制器

 


 

 

 

Name:事物控制器,名稱,隨意,最好具有業務意義;

 

Comments:注釋;

 

Generate parent sample:勾選,則聚合報告中只顯示事務控制器的數據,而不會顯示其中的各個請求的數據,反之則全部顯示。在查看結果樹中以一個上級目錄顯示請求事物;

 

Include duration of timer and pre-post processors in generated sample:選中這一項會統計定時器(timer)的時間,否則只統計采樣器(sample)的時間;

 

8、生命周期/運行周期控制器(Runtime Controller)

 

 

 

 


免責聲明!

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



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