關于抽獎概率的測試

? ? ? ? 一般的抽獎管理功能,基本是在一個獎池中放一堆獎品,分別給它們設置不同的數量和概率,在獎品沒有發完的情況下,概率高的被抽中的幾率就大,反之則低,獎品被抽完后就不能再被抽中,另外,概率為0的不能被抽中,概率為100則一定要被抽中。

? ? ? ?實現抽獎的算法很多。比較常見的抽獎算法有三種:

? ? ? ?第一種:逢“幾”中獎,即通過預估抽獎人數和獎品數來判斷,“幾”=(抽獎人數/獎品數)*N。這是一種最簡單抽獎算法,適合抽獎人數眾多,而且互相無聯系的情況。如今大為流行的微博轉發得獎就常常使用這種算法,即根據轉發次數來決定獎品歸屬,透明而且具有激勵性。這種算法的優點是非常簡單,很容易實現,缺點是當可能產生無人中獎和很多人中獎的情況。

? ? ? ? 第二種:概率抽獎。所謂概率抽獎是最容易想到的抽獎算法了,這個概率可以是一成不變的,也可以是一直在變化調整的,最難的是采用多大的概率,何種情況下采用何種概率。例如:把設定的中獎概率從小到大排序(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%,可以降低并發用戶總數,延長并發時間

二:獎品數量有限,獎品派發情況測試

? ? ? ?測試獎品數量有限,獎品派發情況時,需要把獎品設定成一個比較小的數,抽獎人數要大于獎品數。比如設定某個獎獎品數量20個,但是抽獎人數有200個,且這200人同時抽獎,查看中獎情況。

? ? ? ?具體操作如下:

1.在后臺設置獎品一數量為:20,其他獎品數量不做限制。

2.使用jmeter模擬200個用戶抽獎。

3.查看抽獎結果。

? ? ? 若有超過20人獲得該獎品,則程序存在bug。

? ? ? ?抽獎是一個比較復雜的過程,以上只是針對抽獎核心模塊做了簡單介紹,在實際測試中,當然還需要考慮到安全性和性能問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容