本文由做者張迎貞受權網易雲社區發佈。html
1、用戶定義的變量
一、右鍵快捷菜單中選擇 添加-配置元件-用戶自定義變量。正則表達式
用戶自定義變量中的定義的全部參數的值在測試計劃的執行過程當中不能發生取值的改變,所以通常僅將測試計劃中不須要隨迭代發生改變的參數(只取一次值的參數)設置在此處。例如應用的tid和vid。shell
取樣器中的tid和vid用${tid}和${vid}代替,即便被測應用的部署服務器發生了變化,只須要簡單地修改tid和vid參數的取值便可。apache
二、在測試計劃下方也有用戶定義變量,使用方法同上。安全
2、用戶參數
右鍵快捷菜單中選擇 添加-前置處理器-用戶參數服務器
與用戶自定義變量不一樣的是,用戶參數列表中的參數取值能夠在測試計劃執行過程當中發生變化。dom
如圖,username和password分別有兩組不一樣的取值。經過界面右下方的四個按鈕,能夠向列表中增長參數,增長參數值,刪除參數和刪除參數值。函數
「每次迭代更新一次」選項控制參數取值的變化規則,若是選中該選項,則參數的值在每一個迭代中保持不變,在新的迭代開始時取下一個值。若是取消該選項,則參數值在每一個在其做用域內的sampler發出請求時取下一個可用值。工具
若是參數的取值範圍很小,使用用戶參數比較合適;若是參數的取值範圍很大,建議使用csv data set config方法。測試
3、函數助手
一、CSV函數助手
點擊菜單欄「選項」---->函數助手對話框,看下圖: CSV文件列號是從0開始的,第一列0、第二列一、第三列二、依次類推。
複製生成的參數化函數,打開登錄請求頁面,在右則的參數化中找到咱們要參數化的字段,這裏對用戶名和密碼作參數化,第一列是用戶名,列號爲0;第二列是密碼,列號爲1;修改函數中對應的參數化字段列號就能夠啦。
二、Random
選項-函數助手對話框,列出了系統函數的使用方法,生成後,參數傳入直接使用便可。
三、下面介紹一下經常使用系統函數:
1.__time獲取當前時間
第一個參數爲時間格式,第二個參數爲存放得到當前時間值的參數名稱,例在第一個參數輸入yyyy-MM-dd HH:mm:ss,單擊生成便可獲得正確的函數表達式。
2.__Random隨機數
3.__StringFromFile從本地csv文件中讀取記錄存入參數
與CSV Data Set Config相比,該函數的強大之處是它能夠支持從多個文件中讀取數據。第一個參數是文件名(使用絕對路徑),第二個參數是存放取得數據的參數列表,第三個和第四個參數分別爲數據文件的起始和終止順序號。
4、CSV Data Set Config配置元件
右鍵快捷菜單 添加-配置元件-CSV Data Set Config
Filename:獲取參數值的文本文件(數據池)。文件名既可使用絕對路徑,也可使用相對路徑。當使用相對路徑時,jmeter會在當前測試計劃所在路徑下尋找該文件。
File Encoding:文件編碼方式,默認爲ANSI.若是文本文件是以其餘方式保存的,則請使用相應的編碼方式(如utf-8)。
Variable Names:從文本文件中獲取內容的參數列表。參數列表中能夠包含多個參數,用逗號分隔。
Delimiter:文本文件中分隔記錄域的分隔符,「t」表示tab鍵。
Allow quoted data:當該項值是False時,CSV Data Set Config原封不動地將文本文件中相應域的值取爲參數值;當爲Trues時,將處理文本中用雙引號引用的部分,把雙引號中的內容取爲參數值。除非是CSV文件中的某個域的值包含有設定的分隔符,不然該項設置爲False便可。
Recycle on EOF:當該項取值爲True時,容許循環取值。當文件中的所有記錄被取完後,從新從文件的第一行取值。爲False時,根據stop thread on EOF的取值決定測試計劃的執行行爲。
Stop thread on EOF?:當Recycle on EOF爲true時,不管該項取何值,測試計劃的執行行爲相同;當Recycle on EOF爲False時,該項值爲True時,文件記錄取完後,線程中止運行,若是該項取值爲False,則線程後續執行時給定參數的取值爲<EOF>。
Sharing mode:
All threads,該測試計劃的全部線程共享csv文件中的記錄(全部線程按照順序取文件中的記錄)。
Current thread group,該測試計劃中的每一個thread group中的全部線程共享csv文件中的記錄。
Current thread,每一個線程各自獨立使用csv的記錄。
如下在參數內直接使用便可:
5、jmeter的屬性
以命令行方式運行測試計劃時,用戶可指定從命令行輸入的值替換測試計劃中的某些值。例如:以命令行指定線程組的線程數和運行時長。
__property函數具備3個參數,分別爲屬性名稱、存放屬性值的變量名稱(可選),屬性默認值(可選)。
命令行:
Jmeter –n –t test.jmx –Jthreadcount=10 –Jduration=60
-J表示設置property的值,以上命令行表示:10個線程運行,運行時間爲60秒。
6、正則提取——須要用上個請求返回的參數內容:
一、首先添加後置處理器,正則表達式提取器,可以使用Debug Postcessor查看請求參數結果。
二、 在下個請求中將引用名稱帶入便可。
7、須要使用上個線程的返回的參數內容:
一、首先在線程組1中使用__setProperty函數設置jmeter屬性值(此值爲全局變量值),將所需變量值如${oldtoken} 設置爲jmeter屬性值,即newtoken,示例:
String oldtoken=bsh.args[0];
{__setProperty(newtoken,{oldtoken},)}
2.在線程組2中使用_p函數來調用jmeter屬性,獲取屬性值,從而實現跨線程組,參數值傳遞。
在參數或者url中直接調用該屬性便可,方法:${__P(newtoken,)}
8、參數須要base64加密
一、首先添加後置處理器,BeanShell PreProcessor,可以使用Debug Postcessor查看請求參數結果。
二、腳本區域:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
String cursor64= bsh.args[0];
String queryId64 = bsh.args[1];
BASE64Encoder encode = new BASE64Encoder();
String cursorbase64 = encode.encode(cursor64.getBytes());
System.out.println(cursorbase64);
vars.put("cursor64", cursorbase64);
vars.put("queryId64",querybase64);
三、在請求中直接使用put的參數便可。
9、參數AES等加密——BeanShell
寫好代碼打成jar包,把jar包放到jmeter目錄apache-jmeter-2.13libext下,在jmeter某個sampler下添加一個BeanShell PreProcessor,在beanshell PreProcessor中導入咱們的jar包,調用裏面的加、解密碼方法,把結果保存在jmeter變量中,下面兩個方法是beanshell中咱們最經常使用到的:
· vars.get(String paramStr):得到變量值
· vars.put(String key,String value):,將數據存到jmeter變量中
import com.pingan.ff.account.user.utils.*;
//加密
System.out.println("加密");
String password = "123123";
String encode = SecurityUtils.getKey(password);//調用工具類中的方法進行加密
System.out.println("Set my encode");
vars.put("encode",encode);//把值保存到jmeter變量encode中
String getEncode=vars.get("encode");
System.out.println("Get my encode: " + getEncode);
把加密後的密碼存到jmeter變量中,而後在http sampler中就能夠經過${encode}進行使用了:
關於beanshell的用法更多參考
參考:
http://www.cnblogs.com/zhuque...
http://www.cnblogs.com/sunshi...
http://www.cnblogs.com/pureso...
http://jmeter.apache.org/user...
http://jmeter.apache.org/user...
http://www.cnblogs.com/pureso...
免費領取驗證碼、內容安全、短信發送、直播點播體驗包及雲服務器等套餐
更多網易技術、產品、運營經驗分享請訪問網易雲社區。
文章來源: 網易雲社區