? ? ? ? ?抽獎程序設定的算法:把設定的中獎概率從小到大排序(0.1、0.15、0.25、0.5),劃分區間([0,0.1]、(0.1,0.15]、(0.15,0.25]、(0.25,0.5]),每次抽獎時代碼自動生成一個隨機數,當隨機數在某個區間時,就抽中某個獎品。
關于抽獎的測試,首先需要考慮用戶是否有抽獎資格,每個用戶的中獎次數,中獎概率,連續中獎、前端刷單和獎品配送情況。以下主要介紹抽獎需要測試的核心部分:中獎概率的校對,獎品不足,用戶并發抽獎的情況。
一:程序中獎概率的準確性校對
先設定抽獎概率,模擬大量抽獎數據,算出真實的抽獎概率,再來比對設定的和真實的抽獎概率之間的差距了,如果不超過 正負1%,那么程序概率是正確的。
具體操作方法如下:
1.在后臺管理系統中設置相應抽獎活動各獎品的抽獎概率,并設定每個用戶的抽獎概率次數足夠大
2.用jmeter工具模擬大量用戶進行抽獎
? ?a.因用戶抽獎是在登陸狀態下進行的,所以在jmeter中需要保留用戶的登陸狀態
b.用戶抽獎
設定并發抽獎的用戶數量,訪問抽獎接口 http://XX/game-mobile/intf/h5//turnTable/luckDraw?tableId=&ignoreCsrfToken=true
并監控多用戶并發狀態下,確保抽獎錯誤率為0%
3.在mogodb中查詢當天抽獎總次數,單個獎品被抽中的次數,計算實際中獎概率
a.查詢數據并記錄在excel中
db.turntable_user_luckdraw.find({ "prizeType": "entity" }).count() ??
db.turntable_user_luckdraw.find({?"prizeType":?"phone",?"prizeValue":?10??}).count()
db.turntable_user_luckdraw.find({?"prizeType":?"goldkey",?"prizeNum":?1?}).count()
b.計算實際中獎概率
? ? ? =中獎次數/抽獎總次數
c.保證設置的抽獎概率不變化,在jmeter中更改抽獎的用戶數獲取多組用戶中獎概率數據
并計算出單個獎品中獎的期望值和偏差值。
4.得出結論
比較 設置的中獎概率和期望值的偏差 值,如若結果相差在正負1%的范圍之內,說明結果是沒問題的。反之在排除其他人為操縱故障等因素之后,說明抽獎程序可能存在bug
注:1.想要結果更具有說服力,可以更改設置的中獎概率,再次模擬大量用戶抽獎,得出更多數據?
? ? ? ?2.后臺設定的單個獎品的數量必須充足,不能出現數量為0的情況,否則數據會有很大偏差
? ? ? ?3.想要確保jmeter中多用戶并發結果出錯率為0%,可以降低并發用戶總數,延長并發時間
二:極端值的校驗
? ? ? ? 極端值情況如下:當獎品數量不足時,多個用戶同時抽獎,是否都會中獎。比如某個獎品只是100個,但是抽獎人數有10000個,且這10000人同時抽獎,查看中獎情況。
? ? ? ? 具體操作如下:
1.在后臺設置獎品一數量為:100,其他獎品數量不做限制。
2.使用jmeter模擬10000個用戶抽獎。
3.查看抽獎結果。
? ? ?若有超過100人獲得該獎品,則程序存在bug。
? ? ? ? 抽獎是一個比較復雜的過程,以上只是針對抽獎核心模塊做了簡單介紹,在實際測試中,當然還需要考慮到安全性和性能問題。