Jmeter——參數(shù)化的9種方法

本文由作者張迎貞授權(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)?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容