1. 概率驗證:
抽獎概率主要包括2個方面:
- 獎品概率:后臺設(shè)置獎品的獲獎概率,驗證抽獎獲得的獎品是否符合概率分布;
- 獎品概率浮動:當(dāng)非默認(rèn)獎品C的庫存變?yōu)?時,默認(rèn)獎品的獲獎概率隨之增加(增加值為非默認(rèn)獎品C的獲獎概率);
基于以上2點,我們設(shè)計獎品及概率分布如下表:
| 獎品列表 | 獲獎概率 | 庫存 | 是否默認(rèn) |
|---|---|---|---|
| 獎品A | 40% | 10000 | 是 |
| 獎品B | 30% | 10000 | 否 |
| 獎品C | 30% | 0 | 否 |
| 其他 | 0% | 10000 | 否 |
測試的樣本數(shù)目為1000次抽獎,需要得到的結(jié)果為:抽中獎品A的概率約為70%(即40%+30%),抽中獎品B的概率約為30%,抽中其他獎品的概率為0。
基于以上的設(shè)計,使用Jmeter工具模擬用戶抽獎,結(jié)果符合預(yù)期,如下表:
image.png
注:我們在使用Jmeter時使用了斷言的方式,即抽中獎品A返回true,其他false,同時,我們也通過檢查結(jié)果樹確認(rèn)返回false的獎品均為獎品B。所以上表的錯誤率30.10%代表抽中獎品B的概率,69.90%表示抽中獎品A的概率。
2. 是否超賣驗證
超賣可能出現(xiàn)的場景:當(dāng)獎品數(shù)為1個時,再次多個用戶請求抽獎,存在>1個用戶抽到獎品。針對這種測試場景,確定測試方案如下:
將獎品庫存設(shè)置為1,1000并發(fā)進行請求,驗證只有1個用戶抽獎成功,其他用戶返回活動已下線。
根據(jù)上述方案,測試結(jié)果:無超賣現(xiàn)象。
3. 接口壓測
本次主要針對2個涉及到性能的接口進行壓測:柚幣抽獎 & 獲得額外獎品。壓測結(jié)果如下:
| 接口名稱 | 并發(fā)量 | TPS | 平均響應(yīng)時間(ms) |
|---|---|---|---|
| 柚幣抽獎 | 48 | 18.7 | 2286 |
| 額外獎品 | 48 | 176.7 | 243 |
通過以上數(shù)據(jù)可知,柚幣抽獎接口性能較低,低于預(yù)期,即柚幣商城首頁接口(tae_coin)的接口性能(TPS 約為60),上線風(fēng)險較高。
下面針對柚幣抽獎接口涉及到的接口做具體分析:
3.1 柚幣中心接口
首先,先對柚幣中心的查柚幣、扣柚幣、加柚幣進行壓測,該部分壓測請廈門@翁秀妹@周澤潤進行了協(xié)助。@翁秀妹在內(nèi)網(wǎng)環(huán)境下,得出這3個接口的壓測結(jié)果如下:
| 接口名稱 | 并發(fā)量 | TPS | 平均響應(yīng)時間(ms) | CPU占用率 | 平均負(fù)載 |
|---|---|---|---|---|---|
| 查柚幣 | 48 | 228 | 308 | 6% | 1 |
| 扣柚幣 | 48 | 126 | 559 | 18% | 3 |
| 加柚幣 | 48 | 447 | 102 | 56% | 24 |
因為電商這邊是通過公網(wǎng)與柚幣中心進行交互,所以,我們又針對公網(wǎng)環(huán)境對上述3個接口進行了壓測(48并發(fā)、5min),因柚幣中心的服務(wù)器無法監(jiān)控,我們僅給出接口對應(yīng)的TPS和平均響應(yīng)時間,如下表:
| 接口名稱 | 并發(fā)量 | TPS | 平均響應(yīng)時間(ms) |
|---|---|---|---|
| 查柚幣 | 48 | 36 | 1194 |
| 扣柚幣 | 48 | 41.8 | 1030 |
| 加柚幣 | 48 | 343.3 | 124 |
Jmeter數(shù)據(jù)如下:
查柚幣
image.png
加柚幣
image.png
扣柚幣:
image.png
由上面數(shù)據(jù)可知,目前柚幣中心接口經(jīng)過改造后,扣柚幣、查柚幣接口在走外網(wǎng)的情況下TPS較低、平均響應(yīng)時間較長。
然后,我們針對柚幣抽獎、額外獎品接口進行壓測,其中,柚幣抽獎接口涉及到柚幣中心的查柚幣、扣柚幣、加柚幣接口,額外獎品如配置為柚幣商品,則涉及到柚幣中心的加柚幣接口。這里為了驗證電商獨立業(yè)務(wù)代碼,暫給額外獎品配置為非柚幣商品。
3.2 柚幣抽獎接口
壓測方案:
并發(fā)數(shù)為48,穩(wěn)壓5min,利用332個不同用戶不斷地去抽獎,獲得該接口的TPS和平均響應(yīng)時間,同時監(jiān)控服務(wù)器性能。
壓測結(jié)果:
| 接口名稱 | 并發(fā)量 | TPS | 平均響應(yīng)時間(ms) | CPU占用率(應(yīng)用服務(wù)器) | CPU占用率(數(shù)據(jù)庫) |
|---|---|---|---|---|---|
| 額外獎品 | 48 | 18.7 | 2286 | 12% | 1% |
Jmeter數(shù)據(jù)統(tǒng)計:
image.png
通過上面數(shù)據(jù)及代碼日志,可知柚幣抽獎的主要耗時集中在curl請求柚幣中心的扣柚幣接口上面,所以造成該接口耗時較長,其中查柚幣已在柚幣首頁時進行了緩存優(yōu)化,所以柚幣抽獎接口不會調(diào)用查柚幣接口。
代碼log日志——記錄功能模塊耗時
image.png
3.3 額外獎品接口
壓測方案:
并發(fā)數(shù)為48,穩(wěn)壓5min,利用332個不同用戶不斷地去領(lǐng)取額外獎品,獲得該接口的TPS和平均響應(yīng)時間,同時監(jiān)控服務(wù)器性能。
壓測結(jié)果:
| 接口名稱 | 并發(fā)量 | TPS | 平均響應(yīng)時間(ms) | CPU占用率(應(yīng)用服務(wù)器) | CPU占用率(數(shù)據(jù)庫) |
|---|---|---|---|---|---|
| 額外獎品 | 48 | 176.7 | 243 | 80% | 5% |
Jmeter數(shù)據(jù)統(tǒng)計
image.png






