1、工作中遇到一個場景就是對某個單一接口進行循環請求,并需要獲取每次請求后返回的相應數據;
2、首先就在jmeter對接口相關組件進行配置,需要組件有:循環控制器、CSV數據文件設置、計數器、訪問接口、HTTP信息頭管理器、正則表達式提取器;BeanShell取樣器;這些組件排列方式如圖所示:
3、循環控制器:其它組件都在循環控制器下,需要循環訪問多少次就配置多少次循環
4、CSV數據文件設置:是用于循環訪問接口中從配置文件提取參數時用到的配置組件,文件名:參數文件路徑;文件編碼:如果有中文則需要選擇:UTF-8;變量名:如果是一個參數就輸入一個變量名稱,如:userID,兩個就輸入兩個名稱;如:user,pass? 其它配置默認即可。
引用文件配置如下:兩種方式手動在txt文件編輯,兩個引用tab頁隔開,或者通過excel表格配置好后復制過來。不要有空白行。
5、計數器:用于接口訪問時給接口編號。Starting value:初始值。遞增:每次增加多少個;引用名稱:設置引用變量:num
6、除BeanShell取樣器是在循環控制器下且放在最后一個,其它的組件就是在訪問接口下級進行配置了,信息頭管理器的配置不贅述了,該接口下的正則表達式是用來提取接口返回的響應數據配置如下:
引用名稱:result${num}? 后面BeanShell取樣器中響應數據寫入文件時需要引用的參數,${num}是計數器,每次循環加1,在BeanShell取樣器中,需要用函數來存儲和傳遞${num},不能直接引用
正則表達式:(.+)? ?表示提取全部相應響應數據
7、BeanShell取樣器,著重需要配置該取樣器,其位置是處于循環控制器的下級,并在訪問接口組件的下方如圖所示:
腳本內容:
//指定需要寫入到哪個文件,格式:TXT,csvFileWriter file = new FileWriter("D:\\Program Files\\apache-jmeter-5.1.1\\bin\\WedoJB\\text.txt",true);//創建一個字符緩存輸出流BufferedWriter out = new BufferedWriter(file);//寫入文件內容//vars.get:獲取 jmeter 中的變量值//將計數器組件參數 num 通過vars.get函數傳遞給字符串 countString count=vars.get("num");//通過Integer.parseInt函數將字符串count類型轉化為int類型并賦值給countNumint countNum=Integer.parseInt(count);//"接口"+countNum+":寫入文件每一行記錄接口循環數
//vars.get("result"+countNum):引用正則表達式組件中的參數,countNum對應${num}
//\r\n\r\n 表示兩次回車換行。
out.write("接口"+countNum+":\r\n"+vars.get("result"+countNum)+"\r\n\r\n");//關閉寫數據流out.close();//關閉文件
file.close();
配置完成后,寫入文件格式如下: