1. 概率验证:
抽奖概率主要包括2个方面:
- 奖品概率:后台设置奖品的获奖概率,验证抽奖获得的奖品是否符合概率分布;
- 奖品概率浮动:当非默认奖品C的库存变为0时,默认奖品的获奖概率随之增加(增加值为非默认奖品C的获奖概率);
基于以上2点,我们设计奖品及概率分布如下表:
奖品列表 | 获奖概率 | 库存 | 是否默认 |
---|---|---|---|
奖品A | 40% | 10000 | 是 |
奖品B | 30% | 10000 | 否 |
奖品C | 30% | 0 | 否 |
其他 | 0% | 10000 | 否 |
测试的样本数目为1000次抽奖,需要得到的结果为:抽中奖品A的概率约为70%(即40%+30%),抽中奖品B的概率约为30%,抽中其他奖品的概率为0。
基于以上的设计,使用Jmeter工具模拟用户抽奖,结果符合预期,如下表:
image.png
注:我们在使用Jmeter时使用了断言的方式,即抽中奖品A返回true,其他false,同时,我们也通过检查结果树确认返回false的奖品均为奖品B。所以上表的错误率30.10%代表抽中奖品B的概率,69.90%表示抽中奖品A的概率。
2. 是否超卖验证
超卖可能出现的场景:当奖品数为1个时,再次多个用户请求抽奖,存在>1个用户抽到奖品。针对这种测试场景,确定测试方案如下:
将奖品库存设置为1,1000并发进行请求,验证只有1个用户抽奖成功,其他用户返回活动已下线。
根据上述方案,测试结果:无超卖现象。
3. 接口压测
本次主要针对2个涉及到性能的接口进行压测:柚币抽奖 & 获得额外奖品。压测结果如下:
接口名称 | 并发量 | TPS | 平均响应时间(ms) |
---|---|---|---|
柚币抽奖 | 48 | 18.7 | 2286 |
额外奖品 | 48 | 176.7 | 243 |
通过以上数据可知,柚币抽奖接口性能较低,低于预期,即柚币商城首页接口(tae_coin)的接口性能(TPS 约为60),上线风险较高。
下面针对柚币抽奖接口涉及到的接口做具体分析:
3.1 柚币中心接口
首先,先对柚币中心的查柚币、扣柚币、加柚币进行压测,该部分压测请厦门@翁秀妹@周泽润进行了协助。@翁秀妹在内网环境下,得出这3个接口的压测结果如下:
接口名称 | 并发量 | TPS | 平均响应时间(ms) | CPU占用率 | 平均负载 |
---|---|---|---|---|---|
查柚币 | 48 | 228 | 308 | 6% | 1 |
扣柚币 | 48 | 126 | 559 | 18% | 3 |
加柚币 | 48 | 447 | 102 | 56% | 24 |
因为电商这边是通过公网与柚币中心进行交互,所以,我们又针对公网环境对上述3个接口进行了压测(48并发、5min),因柚币中心的服务器无法监控,我们仅给出接口对应的TPS和平均响应时间,如下表:
接口名称 | 并发量 | TPS | 平均响应时间(ms) |
---|---|---|---|
查柚币 | 48 | 36 | 1194 |
扣柚币 | 48 | 41.8 | 1030 |
加柚币 | 48 | 343.3 | 124 |
Jmeter数据如下:
查柚币
image.png
加柚币
image.png
扣柚币:
image.png
由上面数据可知,目前柚币中心接口经过改造后,扣柚币、查柚币接口在走外网的情况下TPS较低、平均响应时间较长。
然后,我们针对柚币抽奖、额外奖品接口进行压测,其中,柚币抽奖接口涉及到柚币中心的查柚币、扣柚币、加柚币接口,额外奖品如配置为柚币商品,则涉及到柚币中心的加柚币接口。这里为了验证电商独立业务代码,暂给额外奖品配置为非柚币商品。
3.2 柚币抽奖接口
压测方案:
并发数为48,稳压5min,利用332个不同用户不断地去抽奖,获得该接口的TPS和平均响应时间,同时监控服务器性能。
压测结果:
接口名称 | 并发量 | TPS | 平均响应时间(ms) | CPU占用率(应用服务器) | CPU占用率(数据库) |
---|---|---|---|---|---|
额外奖品 | 48 | 18.7 | 2286 | 12% | 1% |
Jmeter数据统计:
image.png
通过上面数据及代码日志,可知柚币抽奖的主要耗时集中在curl请求柚币中心的扣柚币接口上面,所以造成该接口耗时较长,其中查柚币已在柚币首页时进行了缓存优化,所以柚币抽奖接口不会调用查柚币接口。
代码log日志——记录功能模块耗时
image.png
3.3 额外奖品接口
压测方案:
并发数为48,稳压5min,利用332个不同用户不断地去领取额外奖品,获得该接口的TPS和平均响应时间,同时监控服务器性能。
压测结果:
接口名称 | 并发量 | TPS | 平均响应时间(ms) | CPU占用率(应用服务器) | CPU占用率(数据库) |
---|---|---|---|---|---|
额外奖品 | 48 | 176.7 | 243 | 80% | 5% |
Jmeter数据统计
image.png
网友评论