Jmeter常用元件介紹及其Beanshell的使用
一. Jmeter做介面測試的常用元件介紹
- ##### 測試計劃
測試計劃是Jmeter測試的起點,是其他Jmeter測試元件的容器。包含一個功能模組測試的所有內容,包含所有的控制元件,屬性,變數。所以,一個.Jmx檔案中只有一個測試計劃。測試計劃中可以定義變數,引入jar包等。
- ##### 執行緒組
執行緒組可以理解為一個虛擬使用者組,執行緒間變數相互獨立,一個測試計劃內可以包含多個執行緒組;執行緒屬性有:執行緒數量,執行緒啟動間隔時間(0位立刻啟動所有執行緒),單執行緒迴圈次數,執行緒執行順序,是否使用排程器。
- ##### Sampler取樣器
模擬請求,如HTTP,FTP請求等。在Jmeter中承擔測試任務。
- ##### 監聽器
對取樣器請求的結果進行顯示,統計資料(介面請求的錯誤率,常用的效能指標如吞吐量等)負責收集和顯示測試結果。
- ##### 斷言
一種驗證響應結果是否和期望相符的方法。
- ##### 邏輯控制器
控制傳送請求時的邏輯行為,常與Sampler取樣器結合模擬請求,如if控制器
- ##### 前置處理器
在傳送請求之前需要完成的工作。常常被用來修改請求的相關設定。如:URL重寫修飾符,
- ##### 後置處理器
在傳送請求之後需要完成的工作。常常被用來處理響應結果。如:正則表示式處理器,Bean Shell PostProcessor,
- ##### 配置元件
用來初始化預設值和變數,以便後續取樣器使用。將在其作用域的初始化階段處理,Jmeter常用的配置元件包括:HTTP Cookie管理器,HTTP Cache Manager,HTTP資訊頭管理器,CSV資料檔案設定,使用者自定義變數等。
二、部分舉例
我們以抽獎活動為例,顯示抽獎10次時,每次抽中的具體獎品以及該獎品出現的概率,假設有三種獎品
測試過程
- 新增測試計劃:抽獎活動;
-
新增Sampler:使用者登入(login介面),並在請求上插入上級僅一次邏輯控制器,控制同一使用者僅登入一次;
-
新增HTTP Cookie管理器:用來獲取使用者登入的token;
-
新增HTTP Cache Manager;
-
新增HTTP資訊頭管理器:新增HTTP請求頭引數;
-
HTTP URL重寫修飾符;
-
新增Sampler:抽獎,該介面可用於獲取使用者所抽到的獎品資訊;
對抽獎介面,新增後置管理器-正則表示式提取器:用於獲取響應結果中prizeName的值;(正則表示式的匹配規則可自行學習)
如:

對抽獎介面,新增後置處理器-Bean Shell PostProcessor:用來處理抽獎介面的返回資料,得到抽獎總次數,每次所抽獎品和抽到某種獎品的次數。值得注意的是,如果直接在beanshell腳本里定義變數,則每次請求介面變數都會被重新初始化,所以,我們需要針對抽獎介面新增配置元件-使用者自定義變數,以此儲存每次抽獎的結果和次數。具體方法為:

除此之外,使用者自定義變數中的value引數為String型別,如果想對此變數進行數值運算,需要將其轉化為int型別,儲存運算後的值時再將其轉化為String型別。
附上BeanShell指令碼,
{ String prizeName = vars.get("prizeName"); //抽中獎品一的次數 int c1 = Integer.parseInt(vars.get("count1")); //抽中獎品二次數 int c2 = Integer.parseInt(vars.get("count2")); //抽獎總次數 int summ= Integer.parseInt(vars.get("sum")); summ = summ+1; vars.put("sum",summ.toString()); System.out.print("第"+summ+"次抽獎:"); //c1 = c1+1; if(prizeName.startsWith("獎品一")){ //System.out.println(vars.get("prizeName")); c1 = c1+1; vars.put("count1",c1.toString()); // System.out.println("獎品一:"+c1+"次"); }else if(prizeName.startsWith("獎品二")){ //獎品二 c2 = c2+1; vars.put("count2",c2.toString()); //System.out.println("抽中獎品二的次數為:"+c2+"次"); }else{ //該需求內的某次必中的其他獎品 System.out.println(vars.get("prizeName")); } System.out.println(vars.get("prizeName")); if(summ == 10){ System.out.println("-------------------------------------------"); System.out.println("抽獎總次數為:"+summ); System.out.println("抽中獎品一次數為:"+c1+"次"); System.out.println("抽中獎品二次數為:"+c2+"次"); } System.out.println("-------------------------------------------"); }
其中,count1,count2,sum為新增的使用者自定義變數,用於儲存每次請求變數的結果。(新增-配置原件-使用者自定義變數)
設定執行緒組數為1,迴圈次數為10,及單使用者登入,抽獎十次的結果,顯示如圖:

2.2兩個介面之間有邏輯關係
概述:測試修改密碼介面,但需要先校驗驗證碼正確(校驗驗證碼介面)。
測試過程:
- 校驗驗證碼介面加後置正則表示式提取器,提取該介面返回結果(成功),我提取的是返回的msg的成功資訊
在修改密碼介面上新增邏輯控制器(if控制器),寫入if控制條件,顯示如圖:
結果:驗證碼通過後才會請求修改密碼介面
熱度: 8