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個線程比較合理),循環次數勾選永遠,即測試會不停執行。
這裏寫圖片描述

測試結果在項目中的效果這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章