一、JMETER基本概念
1、 測試計划:頂級菜單,代表一個測試計划;
2、 線程組:代表一個要測試的場景(各種相關的交易集合),對於性能測試來說可以指定多少個用戶完成這個場景的內容,對於自動化測試來說,指定一個用戶即可;
3、 控制器:掛在線程組下,用來控制各種交易(接口)的調用頻率,有循環控制器、簡單控制器等等
4、 取樣器:代表一次發起請求和接收響應的元件,這里可以認為是一個接口、交易、請求
5、 前置處理器:取樣器發起請求前可以用這做一些工作,比如參數化等等
6、 后置處理器:取樣器收到響應后做一些工作,比如提取響應報文中的內容
二、前置處理器跟后置處理器的區別
前置處理器是用於發送請求之前,用於准備工作,比如參數化獲取當前日期、獲取隨機字母數字名稱、獲取當前日期下月日期。
【BeanShell PreProcessor、用戶參數】
后置處理器是用於發送請求之后,取樣器收到響應后做一些工作,比如提取響應報文中的內容,獲取Cookie、token 。
【BeanShell PreProcessor、正則表達式提取器、JSON Extractor、Debug PostProcessor】
三、前置處理器使用
3.1 BeanShell PreProcessor
例如: 通過beanshell 腳本獲取當前日期、當前日期減1天、 當前日期加30天
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class GetTime { /** * 獲取當前日期 * * @return */ public String getcurrentDate() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String currentDate = formatter.format(currentTime); return currentDate; } /** * 獲取當前日期的下一個月 * * @param day * @return */ public String getDateAddMonth() { String year_month_day = "yyyy-MM-dd"; SimpleDateFormat dgt = new SimpleDateFormat(year_month_day); Calendar date = Calendar.getInstance(); date.add(Calendar.MONTH, Integer.parseInt("1")); String endDate = dgt.format(date.getTime()); return endDate; } /** * 獲取當前日期減一天 * * @return */ public String getDateBeforeDay() { Calendar c = Calendar.getInstance(); Date date = null; Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String a = formatter.format(currentTime); try { date = new SimpleDateFormat("yy-MM-dd").parse(a); } catch (ParseException e) { e.printStackTrace(); } c.setTime(date); int day = c.get(Calendar.DATE); c.set(Calendar.DATE, day - 1); String dayBefroe = new SimpleDateFormat("yyyy-MM-dd").format(c .getTime()); return dayBefroe; } }
四、后置處理器使用
4.1 BeanShell PreProcessor