背景:有一个抽奖活动,这个奖品的发放需要后台管理页面设置一个获奖概率(0~100%)
求助:如何准确测试代码实现确实是按照设置的概率进行发奖的,有好的方案让领导、客户信服?
貌似大部分都是说怎么测试概率的,说点别的哈
测试思路:
1.概率后台可配置
2.此活动会读取这个配置
3.验证配置生效
1.【概率后台可配置】
a.后台的配置的功能测试,对数值类型做校验,浮点数、正整数、负数什么的都试试
b.需求校验,比如设置一等奖概率为 0.5,是指获奖概率为 0.5% 还是 50%,比如后台计算逻辑是百分比还是千分比
c.体验和容错,比如设置一等奖概率为 100% 而时要有提示预警,等其他会导致配置人员误会或者配错导致损失的可能性
2.【此活动会读取这个配置】
a.后台加打印,输出读取的概率,或者直接手动设置 100% 和 1% 确认配置生效即可
3.【验证配置生效】
a.评论中各位大神确认概率和验证概率的方法,根据自己的环境自取即可
关于怎么让领导、客户信服,直接拿测试数据说话。
比如当前配置下,单人平均每万次抽奖,会产生 n1 个一等奖,n2 个二等奖...
比如线上环境下,至多会产生多少次抽奖,会产生多少奖励,成本预估是多少
比如特殊情况下,多人同时抽奖,功能 hold 的住
balalala...
白盒。。
1.在后台就配置两个奖品,概率各配 50%,抽取大量次数,看两个奖品是否接近 1:1
2.然后配置三个、四个,配置不同概率,看获取比率
把接口拿来调用了 10W 次看看结果呗。。。
白盒:看代码怎么写的。很可能就是一个 random()*100 得出的随机数,判断是否在中奖概率区间(比如设定概率是 4%,那就是 [0,4) 区间的算作中奖)
黑盒:大量调用(至少 100 次以上,数量越多越准确)测试,看概率是否接近
能说服领导和客户的话,第一种能说得清楚是最好的,第二种始终是黑盒,无法准确证明逻辑一定写对,只能举几个例子反推逻辑没有大问题。
首先要看开发如何实现的,如果是根据配置的概率进行伪随机,那就直接打回吧,这概率是不可控的。
我觉得比较合理的实现方式是抽奖前按照配置的概率先生成个奖池,奖池的大小需要根据概率的精度来设置。
比如 1 等奖 1%,二等奖 9%,三等奖 30%,四等奖 60%
那就生成个大小 100 的奖池,其中一二三四等奖分别是 1,9,30,60 个,奖池内奖品的顺序混淆下,然后每次抽奖从奖池中取一个就行,取完之后将数据逻辑删除,1 个奖池抽完再生成奖池就行。
这样实现的话,你可以通过查看 db 中的数据和将 1 个完整的奖池抽空来测试实际的概率是否与配置的概率一致。
问了下领导,说用工具抽奖 10000 次去看结果的正态分布,这个怎么搞?靠谱么
这一个营销活动的概率,感觉要花费很多的成本才能验证,而且结果也不一定百分比准确吧
这个抽奖可以是接口吧,写代码,你循环去调用个 1w 次,然后代码里分析下,打印出 1 等奖多少个,比例多少,2 等奖多少个,比例多少。。。。精准而优雅
这种就是纯黑盒测试方法了。
结果基本能反映真实用户的情况,当然不大可能真的和你设定的概率一模一样,但只要误差在可接受范围就好。成本其实还好,写个脚本,接口调用 1w 次并记录下返回结果,成本倒没高到不可接受。用 jmeter 并行请求还能更快。
请求接口,请求量越大越好,可以用压测工具。然后统计数据。分析是否与配置的概率一致
大量模拟用户抽奖调用就行了,数据量需要尽可能的大。不然对欧皇来说,1% 也能中奖,对非酋来说 99% 都中不了奖
如果只是单纯测试概率,可以直接调用接口,然后把返回的数据存储起来,去生成正态图就 OK 了。
貌似大部分都是说怎么测试概率的,说点别的哈
测试思路:
1.概率后台可配置
2.此活动会读取这个配置
3.验证配置生效
1.【概率后台可配置】
a.后台的配置的功能测试,对数值类型做校验,浮点数、正整数、负数什么的都试试
b.需求校验,比如设置一等奖概率为 0.5,是指获奖概率为 0.5% 还是 50%,比如后台计算逻辑是百分比还是千分比
c.体验和容错,比如设置一等奖概率为 100% 而时要有提示预警,等其他会导致配置人员误会或者配错导致损失的可能性
2.【此活动会读取这个配置】
a.后台加打印,输出读取的概率,或者直接手动设置 100% 和 1% 确认配置生效即可
3.【验证配置生效】
a.评论中各位大神确认概率和验证概率的方法,根据自己的环境自取即可
关于怎么让领导、客户信服,直接拿测试数据说话。
比如当前配置下,单人平均每万次抽奖,会产生 n1 个一等奖,n2 个二等奖...
比如线上环境下,至多会产生多少次抽奖,会产生多少奖励,成本预估是多少
比如特殊情况下,多人同时抽奖,功能 hold 的住
balalala...