• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

pytest1重复测试 + 结果汇总

武飞扬头像
leslie0727
帮助1

1、背景

同事问我一个问题:现在有某个抽奖接口,每次请求都会返回奖励的ID和数量,现在我想批量请求这个接口之后,把奖励的ID和数量汇总。主要运用场景就是针对于某个抽奖活动,累计抽多次后统计各个奖励的次数或者特殊奖励抽取到所需的次数或者概率问题,之前想着用postman或者jmeter来实现,但是感觉工具操作太繁琐,直接一个py脚本加结果展示就可以搞定。

2、分析

首先需要拿到这个接口返回的json结构,然后利用哈希表计数实现(leetcode哈希算法题里面很多类似的思路,py中对应的数据结构是dict,java用hashmap统计即可)

需要学习类似算法题的童鞋可以移步我的leetcode专栏(多思路 多语言书写)

3、实现

业务接口:http://xxxxxx/activity_v2/lottery/do_lottery

返回示例:

我们可以发现,返回的奖励在result里面,result是一个数组,数组里面每一个元素是dict,我们可以对其进行遍历处理,拿到reward_id(奖品的id)和reward_val(奖品的数量)

  1.  
    {
  2.  
    "code": 200,
  3.  
    "msg": "ok",
  4.  
    "result": [
  5.  
    {
  6.  
    "act_id": 0,
  7.  
    "reward_type": "prop",
  8.  
    "reward_id": 1010012,
  9.  
    "reward_val": 1,
  10.  
    "reward_name": "心动礼物卡x1",
  11.  
    "reward_level": 1,
  12.  
    "reward_message": {}
  13.  
    },
  14.  
    {
  15.  
    "act_id": 0,
  16.  
    "reward_type": "prop",
  17.  
    "reward_id": 1100145,
  18.  
    "reward_val": 1,
  19.  
    "reward_name": "KissYou礼物卡x1",
  20.  
    "reward_level": 1,
  21.  
    "reward_message": {}
  22.  
    },
  23.  
    {
  24.  
    "act_id": 0,
  25.  
    "reward_type": "prop",
  26.  
    "reward_id": 1100144,
  27.  
    "reward_val": 3,
  28.  
    "reward_name": "Mojito礼物卡x3",
  29.  
    "reward_level": 1,
  30.  
    "reward_message": {}
  31.  
    },
  32.  
    {
  33.  
    "act_id": 0,
  34.  
    "reward_type": "prop",
  35.  
    "reward_id": 1100101,
  36.  
    "reward_val": 6,
  37.  
    "reward_name": "情书礼物卡x6",
  38.  
    "reward_level": 1,
  39.  
    "reward_message": {}
  40.  
    },
  41.  
    {
  42.  
    "act_id": 0,
  43.  
    "reward_type": "prop",
  44.  
    "reward_id": 1100620,
  45.  
    "reward_val": 4,
  46.  
    "reward_name": "生日蛋糕礼物卡x4",
  47.  
    "reward_level": 1,
  48.  
    "reward_message": {}
  49.  
    },
  50.  
    {
  51.  
    "act_id": 0,
  52.  
    "reward_type": "prop",
  53.  
    "reward_id": 1200696,
  54.  
    "reward_val": 5,
  55.  
    "reward_name": "野菜礼物卡x5",
  56.  
    "reward_level": 1,
  57.  
    "reward_message": {}
  58.  
    }
  59.  
    ]
  60.  
    }
学新通

脚本实现(附注释): 

  1.  
    # 文件名tests.py
  2.  
    import pytest
  3.  
    import requests
  4.  
     
  5.  
     
  6.  
    # 全局变量,用来统计结果
  7.  
    total_count = {}
  8.  
    class Test:
  9.  
    # 装饰器,作用是重复执行
  10.  
    @pytest.mark.repeat(10)
  11.  
    def test_001(self):
  12.  
    # 业务接口,这里保密处理
  13.  
    url = r'http://xxxxxx/activity_v2/lottery/do_lottery?act_id=658&uid=137218093&type=2&number=20'
  14.  
    # 获取返回体json
  15.  
    res = requests.post(url=url).json()
  16.  
    result = res['result']
  17.  
    # 统计计数
  18.  
    for reward in result:
  19.  
    if reward["reward_id"] in total_count:
  20.  
    total_count[reward["reward_id"]] = reward['reward_val']
  21.  
    else:
  22.  
    total_count[reward["reward_id"]] = reward['reward_val']
  23.  
    # 每次累计之后打印
  24.  
    print(total_count)
  25.  
     
  26.  
     
  27.  
    if __name__ == '__main__':
  28.  
    pytest.main(['-s', 'tests.py'])
学新通

结果:

每次抽奖之后我都做了一次统计,10次抽奖累计的奖品ID和数量就是第十行的结果

学新通

优化:

控制台不够直观,可以写入excel文件或者txt文件,不再赘述

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjagbk
系列文章
更多 icon
同类精品
更多 icon
继续加载