测试分享之抽奖【一】

本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/118419408

最近手上有几个需求和抽奖有关,想着总结下,做些分享;因为是好几个需求综合起来的,计划分2期来说;

【实际这篇博客推迟发布N个月】

个人博客:https://blog.csdn.net/zyooooxie

【以下所有内容仅为个人项目经历,如有不同,纯属正常】

需求1

福利大抽奖活动的规则是: 用户每天最多参与10次抽奖,每次抽奖消耗20积分;每次抽奖都有奖品:实物、虚拟奖励;随机中奖;

操作步骤:进入活动页-抽奖模块,点击 开始抽奖,弹窗(扣除20积分)- 确定,抽奖动效,弹窗-抽奖结果;

测试过程中,我实际的关注点:抽奖次数、抽奖结果、积分的变动。

多用户抽奖、抽奖次数

想着 使用不同用户来做测试;手上有个测试环境的用户信息txt,文件每一行的内容是:userId,、手机号。

实际抽奖时,要先清掉当前用户的参与记录+奖励的领取记录;

要验证抽奖次数,其实就多抽几次,即可;

(代码有删改)


def test_2_func(file: str = r'D:\0002-十万用户_手机信息.txt'):
    # 想要读的行数
    nrows = 10

    # 需要忽略的行数
    skiprows = random.randint(1, 99900)
    data = pd.read_csv(file, encoding='utf-8', skiprows=skiprows, nrows=nrows)

    all_data_list = data.values.tolist()
    return all_data_list


def get_session(phone: str):
    Log.info('当前手机号:{}'.format(phone))
    url = 'https://blog.csdn.net/zyooooxie'
    data = {'mobile': phone}
    res = requests.post(url, json=data, verify=False)

    res_dict = res.json()
    return res_dict['obj']['sessionId']


data_list = test_2_func()

for d in data_list:
    user, ph = d[0], d[1]
    s = get_session(ph)

    # test_0(user_id=user)			# 清理抽奖记录

    for _ in range(30):
        test_1(s, user_id=user)		# 抽奖

测试点:抽奖结果

隐藏规则有:

  1. 奖品是分档次的;假设实物为第5档,虚拟奖励分1-4档;
  2. 用户抽中的奖品,假设与用户的身份相关:用户是8类型,每次抽奖只给4档;用户是7类型,第一次抽奖给1档,第二、三次发放的是2档,第四、五次发放的是3档,其他都是4档;

在实际配置奖品时,我特意使用 字段name来区分不同档次;脚本是 通过请求抽奖接口,根据返回值中 name字段值来做校验;

(代码有删改)


def test_yyy(session: str):
    ug = 8           # 某客群
    Log.info('当前用户分组:{}'.format(ug))

    for i in range(190):
        Log.info('当前第{}次抽奖'.format(i+1))
        current_level = str(test_Config(ug, i))

        r = req_Award(session)
        fact_award(r, level=current_level)


def test_Config(user_group: int, index_int: int):
	# 返回 某用户分组、用户抽奖次数下的 奖品level

    if user_group == 7:
    
        if index_int == 0:
            c_level = 1
        elif index_int == 1 or index_int == 2:
            c_level = 2
        elif index_int == 3 or index_int == 4:
            c_level = 3
        else:
            c_level = 4

    elif user_group == 8:
        c_level = 4

    else:
        raise Exception('用户分组 {} 有问题'.format(user_group))

    return c_level
    
def req_Award(s: str):
    headers = {'Cookie': 'sessionId={}'.format(s)}
    url = 'https://blog.csdn.net/zyooooxie'
    res = requests.post(url, json={}, verify=False, headers=headers)

    return res


def fact_award(res: Response, level: str = '4', user_id: str = 'zyooooxie'):

    res_dict = res.json()

    if res_dict.get('obj'):
        obj_dict = res_dict['obj'][0]

        assert level == obj_dict.get('name')
        Log.info('发放的Name:{} 符合'.format(level))

    else:
        assert res_dict['success'] is False

        if res_dict['errorMessage'].find('今日已经领取过') != -1:
            Log.info(res_dict)

            return
        else:
            raise Exception(res_dict['errorMessage'])   # 其他的error 抛出来


测试点:积分变动

假设 用户的初始integral 都是10000;
Home接口,有个integralAmount 代表当前用户的总积分;
Award接口,会有个spent的字段 来标识实际花费的积分;

(代码有删改)

def test_check_amount(s: str, user_group: int):

    new_ba = None
    Log.info('当前用户分组:{}'.format(user_group))

    for i in range(15):

        res_dh = req_Home(s)
        ba = res_dh.json()['obj']['integralAmount']

        if i == 0:
            assert ba == 10000
            Log.info('首次的integralAmount是 10000')
        else:
            assert new_ba == ba
            Log.info(new_ba)

        res_da = req_Award(s)

        sub_value = res_da.json()['obj'][0]['spent']
        Log.info('当次抽奖 spent:{}'.format(sub_value))
        new_ba = ba - sub_value

本文链接:https://blog.csdn.net/zyooooxie/article/details/118419408

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值