以下是轉載內容,仔細看過后,覺得用得最多的應該是csvread函數、用戶自定義變量以及CSV DATA CONFIG控制器這幾個,但是做練習之后,在結果樹和聚合報告中怎么查看執行結果是個問題,沒找到對應的數據。
正則表達式和數據庫連接留待以后再研究。
案例:郵箱登錄操作,參數化登錄的用戶名
方法一、依賴Jmeter自帶的函數助手
選項-->函數助手對話框,即可打開函數助手彈窗
(1)比如使用函數_Random
輸入最小值、最大值,點擊下方的【生成】按鈕,即會生成:${__Random(1,5,)}
假如郵箱是163的,則用戶名參數的值直接填入:${__Random(1,5,)}@163.com,我測試的郵箱是內網測試用的域名是180chen.cn,則填寫${__Random(1,5,)}@180chen.cn
(2)比如使用函數__CSVRead
先准備csv文件,可以先在excel文件里准備好數據,保存的時候格式選擇csv格式;
輸入csv文件所在的路徑:F:\test.csv,輸入參數所在的列(注意:此處列數是從0開始數的,第一列是用戶名,對應的列號為0,第二列是密碼,對應的列號為1...),生成被調用的函數:${__CSVRead(F:\test.csv,0)}
在參數對應的值處填入:${__CSVRead(F:\test.csv,0)}
方法二、CSV Data Set Config
選中取樣器,右鍵:添加-配置元件-CSV Data Set Config,從csv文件中讀取
Filename:csv文件所在的路徑以及名稱如:F:\test.csv ;(其實不一定要csv文件,親測txt格式的文件也可以)
File encoding:給出頁面的編碼方式,可以不填寫;這里以百度為例,它的源代碼里 ,所以這里File encoding:gb2312
Variable Names(comma-delimited):給出變量名如:name,pwd;這里的變量名是給后面引用用的,如要用到這個文件的值,可以利用變量名來引用:${name},${pwd},如test.csv文件中有這樣的數據:1@180chen.cn,abc1233,那${name}就可以引用到1@180chen.cn,${pwd}就可以引用到abc1233
Delimiter(use '\t' for Tab):這個是用來隔開變量的分隔符,如上面的name,pwd,那分隔符就是“,”
Allow quoted data?:是否允許引用數據,---這個目前還未弄明白,設置成True或者False都能正常引用數據。
Recycle on EOF?:到了文件尾是否循環,True---繼續從文件第一行開始讀取,False---不再循環
Stop thread on EOF?:到了文件尾是否停止線程,True---停止,False---不停止,注:當Recycle on EOF設置為True時,此項設置無效。
Sharing mode:共享模式,All threads---所有線程,Current thread group—當前線程組,Current thread—當前線程。這個地方和LoadRunner中的迭代取之相反,經試驗得出來的結果是:
All threads:測試計划中所有線程,假如說有線程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行。
綜上:CSV Data Set Config實現的功能跟之前用的:${__CSVRead(F:\test.csv,0)}這個函數實現的功能大體上是一樣的。
方法三、用戶定義的變量
選中取樣器,右鍵:添加-配置原件-用戶定義的變量
在列表中填入名稱和值,在別處就可以使用${name}、${pwd}來引用
方法四、正則表達式提取器獲取
在打開登錄頁的時候服務器有返回一個sid,獲取到sid后,然后登錄進入到首頁;所以在這個請求下添加后置處理器:右鍵-添加-后置處理器-正則表達式提取器
第1部分:名稱+注釋,可不修改,只是為了方便自己識別
第2部分:apply to 默認即可
第3部分:要檢查的字段:主體等選擇,一般我們選擇主體,即服務器返回給我們的頁面主體信息
第4部分:
【引用名稱】:就是參數名稱,在別處引用;如輸入mysid,別處引用的時候使用${mysid}
【正則表達式】:表達式中()內的內容就是要提取的。如sid/(.*?)",表示查找sid/字符串之后的內容,直到出現第一個"時結束;(注意括號里的表示提取的內容)
【模板】:用$$引用起來,如果在正則表達式中有多個正則表達式(多個括號括起來的東東),則可以是$1$(表示只有一組數據),$2$等等,表示解析到的第1個、第2個值給mysid
【匹配數字】:0代表隨機取值,-1代表所有,1代表全部取值
【缺省值】:如果參數沒有取到值,則使用此處的缺省值
注意:運行腳本后,在“察看結果樹”監聽器中,[響應數據]標簽頁先搜索sid出現的位置,及出現的規律,如出現的時候前面會有“sid/”字符串; 調試正則提取表達式的時候,可添加Debug Sampler來查看是否正確提取到對應的值(右鍵-添加-Sampler-Debug Sampler)
方法五、從數據庫獲取
1) 將其中的mysql-connector-java-5.1.34-bin.jar放到Jmeter的lib目錄下
2) 添加“配置元件”->“JDBC Connection Configuration”,設置下列參數:
Variable Name:連接池名稱
Database URL:jdbc:mysql://host:port/db(jdbc:mysql://ip地址:端口號/數據庫名稱)
JDBC Driver class:com.mysql.jdbc.Driver
username:連接數據庫的用戶名(如root)
password:連接數據庫的密碼
3) 添加“Sampler”->“JDBC Request”,在SQL Query中輸入查詢語句,如下:
select concat(domain,'+',po_pwd) as userpass from domain;
Variable Name:連接池名稱
注意:該值要和JDBC Connection Configuration中配置的Variable Name值對應,否則會提示:No pool found named: 'pool12', ensure Variable Name matches Variable Name of JDBC Connection Configuration;
4) 在JDBC請求中添加“后置處理器”->“正則表達式提取器”,以提取用戶名、密碼為例,設置正則表達式提取器的參數:
引用名稱:userPass
正則表達式:(.*)\+(.*)
模板:$1$$2$
使用時,userPass_g1即為用戶名,userPass_g2即為對應用戶名的密碼;
注意:
(1)+在正則表達式中是關鍵字,所以需要\轉義。
(2)匹配數字,填0或不填,表示隨機讀取,如果填正整數,如1,則不同虛擬用戶或循環固定讀取某行數據。