1. 程式人生 > >JMeter實現多使用者併發功能測試

JMeter實現多使用者併發功能測試

抽獎活動系統是使用者通過參與活動獲得獎券,然後刮開獎券查詢是否獲獎。

專案需求和技術方案:
專案需求是測試抽獎活動的中獎概率:
1、中獎率在定義的概率範圍內
2、中獎次數不得大於定義的次數
3、所有獎券的狀態顯示正常
自動化方案:
1、中獎概率在千萬級別不可能用人工進行,需要藉助自動化。
2、在自動化測試工具的選擇上,用Java程式碼指令碼的形式做到千萬級別的次數執行時間太長,需要藉助併發測試工具。
3、考慮使用Jmeter的介面測試功能,加上併發的功能和順序執行的邏輯來實現。

實施方案:
考慮到專案的測試需求是測試中獎率,所以只需要選取主要的三個介面進行測試即可。產生獎券 – 刮獎
每個使用者經過這個流程,從產生獎券傳入使用者名稱引數,返回獎券ID,生成的ID用到刮獎介面中,返回獎券狀態。多使用者使用Jmeter的CVSRead方法來生成,刮獎使用的獎券ID引數用正則表示式提取器提取出來,作為刮獎介面的引數。通過多使用者併發執行產生獎券和刮獎的介面,完成這個業務邏輯的功能測試。

JMeter實施過程
設定3個全域性變數,伺服器地址,埠號和活動的ID號

設定3個全域性變數,伺服器地址,埠號和活動的ID號

新建一個dat檔案,供CVSRead函式呼叫。Dat檔案內容為
t.dat
CVSRead函式
每行代表一個使用者名稱和使用者ID,在Jmeter的選項中調出函式對話方塊,選擇_CVSRead,在第一行中輸入dat檔案的路徑 c:\t.dat, 第二行輸入0,然後生成函式${__CSVRead(c:\t.dat,0)}, 呼叫這個函式的時候,0表示呼叫第一列的值,1表示呼叫第二列的值,依此類推。
(這裡補充一下,如果涉及到效能測試的多使用者併發,使用配置元件中的CSV Data config會好點,因為這裡沒有涉及到效能上的問題,所以採用這種方式)

設定產生獎券介面
這裡寫圖片描述

正則表示式提取器這裡寫圖片描述
1、在產生獎券的請求下面新建一個正則表示式提取器
2、在測試計劃下面新建一個檢視結果樹
3、點選綠色三件按鈕執行測試,檢視結果樹中影響資料:{“resultCode”:”0000”,”resultMsg”:”抽獎成功!”,”resultData”:{“id”:11566355,”userId”:9000,”userName”:”autotest0”,”activeId”:3,”status”:0,”catalog”:null,”prizeId”:null,”recipient”:null,”contact”:null,”address”:null,”province”:null,”city”:null,”area”:null,”orderNo”:null,”deviceType1”:”123456”,”deviceId1”:”123456”,”source”:”test”,”deviceType2”:null,”deviceId2”:null,”deviceType3”:null,”deviceId3”:null,”endTime”:1448935237000,”openTicketTime”:0,”createTime”:1447232320281,”prizeName”:null,”prizePrice”:0.0,”thumbnail”:null}}
4、需要提取的是id後面的值:11566355, 正則表示式為{“id“(.+?), 匹配的是需要的值。

設定刮獎介面
刮獎介面呼叫產生獎券介面生成的ID,使用JMeter自帶的函式表示式即可${ticketId},注意的是,使用通過正則表示式提取器得到的引數,只能是該請求下面的請求才能使用,逆向不可用。
這裡寫圖片描述

指令碼配置完需要設定併發的執行緒數和執行的時間來進行測試,線上程組中設定,若測試的中獎概率比較小,比如五百萬分之一,想要儘快完成測試,執行緒數需要設定大一點,這裡推薦100(按CPU執行緒數來算,128個執行緒比較合理),迴圈次數勾選永遠,即測試會不停執行。
這裡寫圖片描述

測試結果在專案中的效果這裡寫圖片描述