小伙伴們在使用JMeter的過程中,肯定會遇到參數值傳遞的問題,下面來和大家總結下,在使用JMeter做壓力測試的時候,常見的3種參數值的傳遞是怎樣的。
(一)從CSV文件讀取要批量輸入的變量
假如我們要登錄的數據保存在login.csv文件里,數據如下:
在JMeter中,我們需要添加CSV Data Set Config這個配置文件,如下圖:
添加后,我們需要填寫其中的必要參數,如Filename和Variable Names:
這里要注意下Variable Names里面的分隔符,為啥是用’,’號呢,因為csv文件login.csv用notepad++打開是如下所示,前面的字段是代表用戶的user,后面的字段代表的pwd:
配置好CSV Data后,我們添加login的HTTP請求,截圖如下:
其中用戶的user和pwd都是用${}包圍着的,這個是JMeter的語法規定。配置線程數為5,點擊啟動按鈕運行后,看到的結果如下:
可以看到,login.csv文件中的2個字段被當作參數值進行了傳遞。
(二)利用Cookie進行值的傳遞
用JMeter進行接口調試時,有時候會遇到需要登錄的情況,如請求wetest的DataSearchAjax接口:
返回的結果如下:
出現這種情況的原因很明顯是未登錄引起的。一個較好的解決方法就是將登錄后的cookies保存下來,在訪問DataSearchAjax接口的時候,帶上用戶登錄后的cookies信息進行查看。
在JMeter中,我們可以通過如下途徑進行cookies的傳遞,如下圖添加HTPP Cookie管理器:
再給登錄的接口添加前置處理器Bean Shell PreProcessor,用來保存登錄的cookies:
下面,我們要在Bean Shell PreProcessor里面添加我們的cookies值了。
import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;
// 身份驗證必須的cookie值字段(可以詢問開發哪些是必須要校驗的字段)
// 可以在登錄后,點擊chrome里URL右邊的查看網站信息按鈕,查看所有的cookie值找到
// wetest的校驗字段是:csrftoken和sessionid
CookieManager manager = sampler.getCookieManager();
String csrftoken = "898b3ade5cb3744140503da601dee5d6793f82807cda581de9eb0982c05dfdc7a";
//定義Cookie對象,其中參數:cookie的名稱, cookie值, cookie域, 路徑, 安全
Cookie cookie = new Cookie("csrftoken",csrftoken,"wetest.qq.com","/",false,0);
manager.add(cookie);
String sessionid = "0ir0hrodptu5qgv9qurk98c3l4";
Cookie cookie1 = new Cookie("sessionid",sessionid,"wetest.qq.com","/",false,0);
manager.add(cookie1);
添加完HTPP Cookie管理器和在前置處理器Bean Shell PreProcessor寫好腳本后,再次運行登錄接口和DataSearchAjax接口:
可以看到,后面的請求攜帶了我們在Bean Shell PreProcessor腳本中保存的cookie值,並且成功返回了要查詢的數據。
(三)利用正則匹配提取上一個接口的返回數據作為下個請求的輸入
用JMeter進行接口調試時,經常會遇到上一接口的返回值中的某個字段,要作為下一接口的輸入,這種情況下,我們需要利用正則匹配來提取我們需要的值。
例如,若要提取相應數據中的goodpraise字段作為下個接口的輸入的話,可以在該接口請求后面添加正則表達式提取器:
我們給正則表達式提取器命名為get_goodpraise,並填寫引用名稱、正則表達式、模板、匹配數值、缺省值,填寫后的如如下:
填寫完成后,在添加新的HTTP請求,來測試提取到的goodpraise_name字段:
這里要注意,${}里面填寫的一樣要是引用名稱的變量,保存后執行:
若返回的請求goodpraise_name字段為-1,-1是我們設定的默認字段。那說明我們的正則表達式寫錯了,要仔細檢查下改成正確的正則表達式,再執行:
可以看到,我們提取到的goodpraise_name字段成功傳遞給新的http請求。
至此,JMeter中3種參數值的傳遞已全部講解完,小伙伴們學會了嗎~*(^_^)*~
本文由騰訊WeTest團隊提供,更多資訊可直接戳鏈接查看:http://wetest.qq.com/lab/