一.需求分析
家装节活动需求文档:https://confluence.haohaozhu.me/pages/viewpage.action?pageId=195788812
关于抽奖逻辑的部分:
抽奖基本原则:
仅普通+个人V用户可中奖,具体不可中奖用户限制如下:
B级用户、批量刷交互、设备批量注册、IP批量注册、批量注册、积分反垃圾、被拉黑的设备ID
公司白名单
测试账号
疑似商业用户账号
机器人账号
注册后没有修改过昵称的账号
每人每天1次抽奖机会,每日0点更新抽奖次数,当日抽奖机会仅限当日使用
单个用户活动期间中奖次数不超过2次。
a.首次中奖后,整体心愿商品中奖概率减半
b. 二次中奖后不得中奖
c. 已中奖心愿商品二次中奖概率为0,不存在两次奖品一致的情况
抽奖方式:建立一个动态奖品池,不定时往其中投放奖品,奖池中有奖品时才有机会中奖。
- 第一步:运营侧给出每天投放到奖池的商品明细、技术控制分时段随机投放商品(随机后运营需确认大奖投放的时间)
- 第二步:用户去抽奖
- 若奖池中没有他的心愿商品,直接不中奖
- 若奖池中有他的心愿商品,随机取一件他的心愿商品,不同价格的心愿商品中奖概率不同
- 200元以下:中奖概率为45%
- 201-500元:40%
- 501-1000:35%
- 1001-2000:30%
- 2001-4000:25%
- 4000以上:20%
- 服务类的(5000元装修基金)中奖概率单独为60%
二.测试用例设计
1.奖品池中的奖品库存不充足
设置抽奖用户10000个 心愿单都只有抱枕 奖品池只有抱枕(数量1) 中奖概率45%
抽奖用户 | 心愿单 | 奖品池 | 设置中奖概率 |
---|---|---|---|
10000 | 抱枕 | 抱枕(1个) | 抱枕45% |
期望结果:只有一个用户中奖,奖品池为空(已验证)
2.奖品池为空
继续第1条的测试用例用户,后续的抽奖中奖用户为0(已验证)
3.心愿单中的商品与奖品池中商品不重合
抽奖用户 | 心愿单 | 奖品池 | 设置中奖概率 |
---|---|---|---|
10000 | 抱枕 | 冰箱(100个) | 抱枕45% 冰箱20% |
期望结果:0个用户中奖 (已验证)
4.同一天只能抽奖一次
继续第2条的测试用例用户,当天继续抽奖
期望结果:接口出错,提示“明天再来,今天已用完”(文案待定)(已验证)
5. 第二天中奖概率减半&同一用户不能中两个一样的奖品
抽奖用户 | 心愿单 | 奖品池 | 设置中奖概率 |
---|---|---|---|
10000 | 抱枕 电视 冰箱 | 抱枕(2000个)电视(2000个)冰箱(2000个) | 45% 25% 20% |
(1)奖品池设置2000个抱枕(中奖概率45%),2000个电视(中奖概率25%),2000个冰箱(20%)
(2)取10000个用户,心愿单设置为:抱枕、电视、冰箱
(3)第一天抽奖预测结果:
中抱枕人数 | 中电视的人数 | 中冰箱的人数 | 未中奖人数 |
---|---|---|---|
1/345%10000≈1500 | 1/325%10000≈833 | 1/320%10000≈667 | 10000-1500-833-667≈7000 |
第一天中奖结果
(4)第二天抽奖预测结果:
第一天中奖结果 第二天中奖结果 |
中抱枕 | 中电视 | 中冰箱 | 未中奖 |
---|---|---|---|---|
中抱枕 | 不可能 | 1/345%1/2*833≈62 | 1/345%1/2*667≈50 | 1/345%7000≈1050 |
中电视 | 1/325%1/2*1500≈63 | 不可能 | 1/325%1/2*667≈28 | 1/325%7000≈583 |
中冰箱 | 1/320%1/2*1500≈50 | 1/320%1/2*833≈28 | 不可能 | 1/320%7000≈467 |
未中奖 | 1500-63-50≈1387 | 833-62-28≈743 | 667-50-28≈589 | 7000-1050-583-467≈4900 |
6.单个用户中奖不能超过2次
第三天以及以后的抽奖,标黄部分的用户均不能中奖
7. 10个心愿商品都重合的情况
抽奖用户 | 心愿单 | 奖品池 | 设置中奖概率 |
---|---|---|---|
10000 | 抱枕 电视 冰箱 椅子 桌子 杯子 窗帘 手机 沙发 服务 | 抱枕(2000个)电视(2000个)冰箱(2000个)椅子(2000) 桌子(2000) 杯子(2000) 窗帘(2000) 手机(2000) 沙发(2000) 服务(2000) | 抱枕45% 电视25% 冰箱20% 椅子40% 桌子35% 杯子30% 窗帘25% 手机20% 沙发35% 服务20% |
中其中一个商品的概率 1/1045%10000≈450
8. 5个心愿商品都重合的情况
抽奖用户 | 心愿单 | 奖品池 | 设置中奖概率 |
---|---|---|---|
10000 | 抱枕 电视 冰箱 椅子 服务 | 抱枕(2000个)电视(2000个)冰箱(2000个)椅子(2000) 服务(2000) | 抱枕45% 电视25% 冰箱20% 椅子40% 服务20% |
三.测试数据准备
- 数据库hhzhome_member->hhz_token
执行去重结果:select * from hhz_token
where uid in (select uid from hhz_token group by uid having count(uid) = 1)
LIMIT 1000
将查询的1000个用户导出为csv格式并保存
- 被测接口:http://m.qa20.haohaoce.com/f/t/api/SpringHomeDecActivity/Lottery
- 接口文档:https://eolinker.haohaozhu.me/independent/#/home/api_studio/inside/api/list?groupID=641&projectHashKey=9kJ6VQi0a57cb53ba59c46fc4b692527a38a87c78d84028&spaceKey=J6SbQyB46eb9f7e7f88605c64b3f7bfb0cc06cfa31afc3f
- 测试环境准备:qa环境
- 心愿单和奖池库存设置(按照用例去数据库设置)
四.执行过程
jmeter创建线程组:
1.首先,要配置数据库的连接信息,添加setup线程组-添加配置元件 JDBC Connection Configuration,配置上我们用的数据库信息
添加取样器—JDBC request,创建一个表用来存放提取的结果
脚本如下:
CREATE TABLE IF NOT EXISTS Springrunresult(
uid varchar(16)
id varchar(16),
name varchar(128)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.模拟一组用户抽奖,设置线程数和Ramp_Up时间:
2.1添加http请求,并参数化
2.2.添加配置元件-CSV数据文件设置
2.3.添加配置元件-查看结果树、响应断言等
2.4添加后置处理器—JSON提取器
注意:json提取器一次提取多个,中间用分号隔开,一次提取整个Response的json全部信息,单独用个$即可。
2.5添加取样器—JDBC request,用来向已经创建的表中插入提取的数据:
脚本如下:
insert into springrunresult values('${uid}','${id}','${name}');
3.设置tearDown线程组,把数据库中的结果导出:
脚本如下:
select * from springrunresult into outfile "/var/lib/mysql-files/resul.xlsx" FIELDS TERMINATED BY "\t" ENCLOSED BY '"';
注:数据的插入和导出等 与数据库权限相关,mysql数据库账户要有创建表的权限,没有权限的话第一步就会失败
导出结果,方便统计测试用例中的中奖人数以及中奖次数:
这样就可以很方便的统计出中奖人数,以及每个人的中奖次数,更有效率的执行测试用例
五. 总结
1.测试执行效率:可以很快速拿到测试用例中每组数据的测试结果,很高效
2.测试用例覆盖:测试用例执行100%覆盖