在上一期講到如何測試機率型業務接口以後,產品又提出了新的需求,總結來講是非固定性機率算法,有一套「算法」來計算用戶下一次中獎的機率。java
一樣是一個機率獲獎的活動,用戶話費必定數額金幣,有機率獲獎,獎項不詳細敘述了。算法
需求更改:用戶獲獎機率P=p(1+0.1*N),其中p表示原始的中獎機率,N表示連續不中獎的次數,N最大爲5。還額外提出一條需求,用戶不能連續中獎,爲了簡化過程每種禮物的中獎機率以1%位單位。編程
接口:三個接口:1、抽獎接口;2、獲取活動配置接口(包括各種禮物配置和信息);3、我的活動詳情(我的信息、抽獎次數、獲獎狀況)多線程
測試工具:Java(不惟一),經過把三個接口提供的功能封裝爲方法,而後經過方法調用去獲取數據,進而統計獲得的結果。框架
測試時間:一天。工具
其中測試的重點仍是機率,可是由於這次的機率有兩項:不能連續中獎+不肯定機率,因此難點在於如何測試用戶獲獎機率P=p(1+0.1*N)這個算式需求實現的正確性。性能
通過討論大概給出了兩個方案:測試
經過數學計算,得到用戶綜合中獎機率P和p對應關係,而後設定不一樣數值的p,進行大量抽獎測試,統計結果與理論計算結果比較,標準依然採用上一期機率型業務接口的相同的測試標準。命令行
首先進行大量測試(好比1萬次),記錄每次用戶抽獎的實際狀況,好比1(中獎)和0(不中獎),而後計算P和p與N的關係表格,獲取某一個p的狀況下,N與P的關係,好比連續2次不中獎以後,下一次中獎的機率Pn。而後統計抽獎記錄裏面「1000」和「1001」出現的次數,計算實際測試中連續兩次不中獎,下一次中獎機率Ps,比較Pn和Ps的大小,標準依然採用上一期機率型業務接口的相同的測試標準。線程
以上兩個方案依然會遇到與上一期相同的問題,測試量較大,耗時較長。由於這次方案几率以用戶爲單位,因此在使用多線程進行測試的過程當中須要講每個線程單獨綁定一個用戶。
上期文章看往期精選第9篇。