本文由作者張迎貞授權(quán)網(wǎng)易云社區(qū)發(fā)布。
一、用戶定義的變量
1、右鍵快捷菜單中選擇?添加-配置元件-用戶自定義變量。
用戶自定義變量中的定義的所有參數(shù)的值在測試計劃的執(zhí)行過程中不能發(fā)生取值的改變,因此一般僅將測試計劃中不需要隨迭代發(fā)生改變的參數(shù)(只取一次值的參數(shù))設(shè)置在此處。例如應(yīng)用的tid和vid。
?
取樣器中的tid和vid用${tid}和${vid}代替,即使被測應(yīng)用的部署服務(wù)器發(fā)生了變化,只需要簡單地修改tid和vid參數(shù)的取值即可。
2、在測試計劃下方也有用戶定義變量,使用方法同上。
二、用戶參數(shù)
右鍵快捷菜單中選擇?添加-前置處理器-用戶參數(shù)
與用戶自定義變量不同的是,用戶參數(shù)列表中的參數(shù)取值可以在測試計劃執(zhí)行過程中發(fā)生變化。
如圖,username和password分別有兩組不同的取值。通過界面右下方的四個按鈕,可以向列表中增加參數(shù),增加參數(shù)值,刪除參數(shù)和刪除參數(shù)值。
“每次迭代更新一次”選項控制參數(shù)取值的變化規(guī)則,如果選中該選項,則參數(shù)的值在每個迭代中保持不變,在新的迭代開始時取下一個值。如果取消該選項,則參數(shù)值在每個在其作用域內(nèi)的sampler發(fā)出請求時取下一個可用值。
如果參數(shù)的取值范圍很小,使用用戶參數(shù)比較合適;如果參數(shù)的取值范圍很大,建議使用csv data set config方法。
三、函數(shù)助手
1、CSV函數(shù)助手
點擊菜單欄“選項”---->函數(shù)助手對話框,看下圖: ?CSV文件列號是從0開始的,第一列0、第二列1、第三列2、依次類推。
復(fù)制生成的參數(shù)化函數(shù),打開登陸請求頁面,在右則的參數(shù)化中找到我們要參數(shù)化的字段,這里對用戶名和密碼做參數(shù)化,第一列是用戶名,列號為0;第二列是密碼,列號為1;修改函數(shù)中對應(yīng)的參數(shù)化字段列號就可以啦。
2、Random
選項-函數(shù)助手對話框,列出了系統(tǒng)函數(shù)的使用方法,生成后,參數(shù)傳入直接使用即可。
3、下面介紹一下常用系統(tǒng)函數(shù):
1.__time獲取當(dāng)前時間
第一個參數(shù)為時間格式,第二個參數(shù)為存放獲得當(dāng)前時間值的參數(shù)名稱,例在第一個參數(shù)輸入yyyy-MM-dd HH:mm:ss,單擊生成即可得到正確的函數(shù)表達(dá)式。
2.__Random隨機(jī)數(shù)
3.__StringFromFile從本地csv文件中讀取記錄存入?yún)?shù)
與CSV Data Set Config相比,該函數(shù)的強(qiáng)大之處是它可以支持從多個文件中讀取數(shù)據(jù)。第一個參數(shù)是文件名(使用絕對路徑),第二個參數(shù)是存放取得數(shù)據(jù)的參數(shù)列表,第三個和第四個參數(shù)分別為數(shù)據(jù)文件的起始和終止順序號。
?
四、CSV Data Set Config配置元件
右鍵快捷菜單?添加-配置元件-CSV Data Set Config
Filename:獲取參數(shù)值的文本文件(數(shù)據(jù)池)。文件名既可以使用絕對路徑,也可以使用相對路徑。當(dāng)使用相對路徑時,jmeter會在當(dāng)前測試計劃所在路徑下尋找該文件。
File Encoding:文件編碼方式,默認(rèn)為ANSI.如果文本文件是以其他方式保存的,則請使用相應(yīng)的編碼方式(如utf-8)。
Variable Names:從文本文件中獲取內(nèi)容的參數(shù)列表。參數(shù)列表中可以包含多個參數(shù),用逗號分隔。
Delimiter:文本文件中分隔記錄域的分隔符,“\t”表示tab鍵。
Allow quoted data:當(dāng)該項值是False時,CSV Data Set Config原封不動地將文本文件中相應(yīng)域的值取為參數(shù)值;當(dāng)為Trues時,將處理文本中用雙引號引用的部分,把雙引號中的內(nèi)容取為參數(shù)值。除非是CSV文件中的某個域的值包含有設(shè)定的分隔符,否則該項設(shè)置為False即可。
Recycle on EOF:當(dāng)該項取值為True時,允許循環(huán)取值。當(dāng)文件中的全部記錄被取完后,重新從文件的第一行取值。為False時,根據(jù)stop thread on EOF的取值決定測試計劃的執(zhí)行行為。
Stop thread on EOF?:當(dāng)Recycle on EOF為true時,無論該項取何值,測試計劃的執(zhí)行行為相同;當(dāng)Recycle on EOF為False時,該項值為True時,文件記錄取完后,線程停止運行,如果該項取值為False,則線程后續(xù)執(zhí)行時給定參數(shù)的取值為<EOF>。
Sharing mode:
All threads,該測試計劃的所有線程共享csv文件中的記錄(所有線程按照順序取文件中的記錄)。
Current thread group,該測試計劃中的每個thread group中的所有線程共享csv文件中的記錄。
Current thread,每個線程各自獨立使用csv的記錄。
以下在參數(shù)內(nèi)直接使用即可:
五、jmeter的屬性
以命令行方式運行測試計劃時,用戶可指定從命令行輸入的值替換測試計劃中的某些值。例如:以命令行指定線程組的線程數(shù)和運行時長。
__property函數(shù)具有3個參數(shù),分別為屬性名稱、存放屬性值的變量名稱(可選),屬性默認(rèn)值(可選)。
命令行:
Jmeter –n –t test.jmx –Jthreadcount=10 –Jduration=60
-J表示設(shè)置property的值,以上命令行表示:10個線程運行,運行時間為60秒。
?
六、正則提取——需要用上個請求返回的參數(shù)內(nèi)容:
1、首先添加后置處理器,正則表達(dá)式提取器,可使用Debug Postcessor查看請求參數(shù)結(jié)果。
2、?在下個請求中將引用名稱帶入即可。
?
七、需要使用上個線程的返回的參數(shù)內(nèi)容:
1、首先在線程組1中使用__setProperty函數(shù)設(shè)置jmeter屬性值(此值為全局變量值),將所需變量值如${oldtoken}?設(shè)置為jmeter屬性值,即newtoken,示例:
|
String oldtoken=bsh.args[0]; {__setProperty(newtoken,{oldtoken},)} |
2.在線程組2中使用_p函數(shù)來調(diào)用jmeter屬性,獲取屬性值,從而實現(xiàn)跨線程組,參數(shù)值傳遞。
在參數(shù)或者url中直接調(diào)用該屬性即可,方法:${__P(newtoken,)}
八、參數(shù)需要base64加密
1、首先添加后置處理器,BeanShell PreProcessor,可使用Debug Postcessor查看請求參數(shù)結(jié)果。
2、腳本區(qū)域:
|
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); |
3、在請求中直接使用put的參數(shù)即可。
九、參數(shù)AES等加密——BeanShell
寫好代碼打成jar包,把jar包放到j(luò)meter目錄\apache-jmeter-2.13\lib\ext下,在jmeter某個sampler下添加一個BeanShell PreProcessor,在beanshell PreProcessor中導(dǎo)入我們的jar包,調(diào)用里面的加、解密碼方法,把結(jié)果保存在jmeter變量中,下面兩個方法是beanshell中我們最常用到的:
·?????????vars.get(String paramStr):獲得變量值
·?????????vars.put(String key,String value):,將數(shù)據(jù)存到j(luò)meter變量中
import com.pingan.ff.account.user.utils.*;
?
//加密
System.out.println("*****加密*****");
String password =?"123123";
String encode = SecurityUtils.getKey(password);//調(diào)用工具類中的方法進(jìn)行加密
System.out.println("Set my encode");
vars.put("encode",encode);//把值保存到j(luò)meter變量encode中
String getEncode=vars.get("encode");
System.out.println("Get my encode: "?+ getEncode);
把加密后的密碼存到j(luò)meter變量中,然后在http sampler中就可以通過${encode}進(jìn)行使用了:
關(guān)于beanshell的用法更多參考
?
參考:
http://www.cnblogs.com/zhuque/archive/2012/11/20/2779253.html
http://www.cnblogs.com/sunshine2016/p/5579001.html
http://www.cnblogs.com/puresoul/p/4915350.html
http://jmeter.apache.org/usermanual/component_reference.html#BeanShell_Sampler
http://jmeter.apache.org/usermanual/component_reference.html#BeanShell_PreProcessor
http://www.cnblogs.com/puresoul/p/4949889.html
免費領(lǐng)取驗證碼、內(nèi)容安全、短信發(fā)送、直播點播體驗包及云服務(wù)器等套餐
更多網(wǎng)易技術(shù)、產(chǎn)品、運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。
相關(guān)文章:
【推薦】?django項目在uwsgi+nginx上部署遇到的坑
【推薦】?如何能低成本地快速獲取大量目標(biāo)用戶,而不是與競爭對手持久戰(zhàn)?