我正在嘗試測驗一些 API,但首先我需要為我在測驗中使用的每個客戶獲取會話密鑰。我有一個包含客戶登錄資訊的 CSV 檔案,并在每個執行緒中讀取它。
我的 JMeter 檔案中有以下表格。
- CSV 資料集配置 - 用戶登錄資訊
- 設定用戶名、密碼 - 每次迭代一個
- 設定執行緒組
- BeanShell Sampler 洗掉
sessionKeys.csv
- BeanShell Sampler 洗掉
File file = new File("C:/user/sessionKeys.csv");
if (file.exists() && file.isFile()) {
file.delete();
}
- 登錄執行緒 -
ThreadCount = threadCount, Loop = 1- 登錄請求
- BeanShell PostPrecessor 創建檔案并將會話密鑰附加到
sessionKeys.csv
- BeanShell PostPrecessor 創建檔案并將會話密鑰附加到
- 登錄請求
if("${sessionKey}" != "not_found")
{
File file = new File("C:/user/sessionKeys.csv");
FileWriter fWriter = new FileWriter(file, true);
BufferedWriter buff = new BufferedWriter(fWriter);
buff.write("${sessionKey}\n");
buff.close();
fWriter.close();
}
- CSV 資料集配置 - 會話密鑰
- API 呼叫執行緒 -
ThreadCount = threadCount, Loop = loop- 獲取資料請求
而且我注意到,即使檔案實際上被洗掉、創建并填充了新的 sessionKey,首先一些請求在檔案被洗掉之前使用了檔案中的舊 sessionKey。
我嘗試添加常量計時器或更改 JMeter 檔案的結構,但沒有任何效果。
uj5u.com熱心網友回復:
看看JMeter 測驗元素執行順序
配置元素
前處理器
計時器
采樣器
后處理器(除非 SampleResult 為空)
斷言(除非 SampleResult 為空)
偵聽器(除非 SampleResult 為空)
CSV 資料集配置是一個配置元素,因此它在 Beanshell 采樣器之前很久就執行了,這完美地解釋了您所面臨的行為。
因此,如果您需要對 CSV 檔案進行一些預處理,則需要在setUp Thread Group中進行
另請注意,從 JMeter 3.1 開始,您應該使用 JSR223 測驗元素和 Groovy 語言撰寫腳本,因此考慮遷移是有意義的。
uj5u.com熱心網友回復:
看起來您的測驗計劃中的 CSV 配置元素存在于執行緒組之外,因此將在洗掉和重新創建檔案之前首先呼叫。
在您的情況下,將會話密鑰存盤為 JMeter 屬性可能更簡單,以便可以在所有執行緒組中訪問它。您可以使用 Groovyprops.put("${sessionKey}", sessionKey)或通過JMeter 函式(如${__setProperty("sessionKey",${sessionKey})}.
然后可以使用屬性函式再次訪問該屬性,例如${__P(sessionKey,)}.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466583.html
