在用jmeter做性能測試的時候,可能會因為依賴請求導致一些問題。
問題
問題一:參數化數據量不足,比如:我要壓測的某個接口依賴登錄,先通過登錄獲取到tokenId(每個賬號登錄一次),然后把tokenId作為被壓測接口的入參,如果賬號不足,當我並發的線程數多於登錄賬號數量,就會出現賬號二次登錄,而前一次登錄獲取到tokenId值將失效,導致用老tokenId的請求失敗;
問題二:依賴請求的存在,導致被壓測的接口性能不准確;
為了解決上面的問題,我們可以不用關聯,先單獨操作依賴的請求,把需要獲取的關聯值存到文件中,被壓測的請求就用文件參數化獲取關聯值,
有人可能會問,被關聯的值可能是有有效時間的,沒關系,我們可以找開發幫忙把有效時間設置長點,比如24h,這樣就不用頻繁重新獲取關聯值保存到文件中,畢竟我們是壓測,不需要關注關聯值的有效期限。
下面,對問題一的場景來演示一下。
刪除已存在的參數化文件tokenId.txt
注意:因為后面要生成tokenId.txt這個文件,如果這個文件存在,我們先刪除。

beanshell腳本
String filename = "C:/tokenId.txt";
File file = new File(filename);
if(file. exists()){
file.delete();
}
生成參數化的文件tokenId.txt
因為只有100個賬號,所以線程數設置為100,循環次數設置為1,即每個線程運行一次

a.登錄接口需要的csv參數化文件userInfo.dat
注意,此參數化文件中有兩列,第一列是卡號,第二列是登錄賬號,下圖抹掉了敏感數據

登錄獲取參數化文件中的登陸賬號userAccount,而卡號cardNumber是被壓測接口需要的參數
b.登錄請求

正則提取tokenId

c.把關聯獲取到的值寫入文件,因為被壓測的接口需要用到tokenId和卡號cardNumber,所以需要把tokenId和卡號配對寫在一行上,第一列是tokenId,第二列是卡號cardNumber

生成的tokenId.txt文件,逗號分隔同一行的tokenId和卡號cardNumber兩列數據,抹掉了敏感數據

被壓測接口腳本

被壓測接口腳本略,這里只演示參數化文件
這樣,被壓測接口就可以用上面生成的關聯參數文件tokenId.txt了,下面變量名稱和生成的tokenId.txt文件中變量順序要一致

最終,我們就可以把腳本的重心完全放到被壓測接口,而排除依賴接口的影響。
當然,讀取參數化文件也會耗費性能,但是影響遠低於先請求依賴接口獲取到關聯數據再請求被測接口。
