• httprunner3.x总结23 - 解决批量执行中重复登陆的问题


    1、批量执行,1次登陆

    import configparser
    import os
    
    import requests
    from lib.common.config_operate import read_ini_config
    from loguru import logger
    
    
    def get_config_value(key1,key2):
        """
        读取config文件的取值
        :param key1: config文件的分类名字,比如 [Host]
        :param key2: config文件的分类下的变量名字,比如 default_host
        :return: 文件值
        """
        pro_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
        config_path = os.path.join(pro_dir, "config.ini")
        config = configparser.ConfigParser()
        config.read_file(open(config_path, encoding="utf-8"))
        value = config.get(key1, key2)
        return value
    
    
    login_info = {}
    
    
    def get_login_info(role, key):
        """
        返回不同登陆角色的 token,一个线程里,只需要登陆一次即可。
        获取token值,例如:get_login_info("expert_001", "token"),
        其中配置文件大概内容如下:
            [Host]
            default_host=https://xxx.com
            eu_test_host=https://xxxx.com
            
            [Login]
            expert_001_account=123
            expert_001_password=123
        :param role: config.ini文件中 [Login] 下的 role_account,role_password。
        :param key: key是登陆后的response里面的键,我们这里取的是 token
        :return: 返回 token 值
        """
        # (1)增加重试次数,防止http连接太多没有关闭导致报错
        requests.DEFAULT_RETRIES = 5
        s = requests.session()
        s.keep_alive = False
    
        # (2)jenkins服务上批量执行用的是一个线程,只要调用过一次,就会存入字典。后面调用这个函数直接返回token即可
        if f'{role}_account' in login_info:
            return login_info[f'{role}_account'][key]
    
        # (3)调用登陆接口
        url = get_config_value('Host', 'default_host') + '/api/base-uc-app/portal/login'
        body = {
            "account": get_config_value('Login', f'{role}_account'),
            "password": get_config_value('Login', f'{role}_password'),
        }
        with s.post(url=url, json=body) as response:
            response_json = response.json()
            if response_json['code'] == 200:
                # (4)将 token 存入字典
                login_info[f'{role}_account'] = response_json['data']
                return response_json['data'][key]
    
    
    if __name__ == '__main__':
        a = get_login_info("expert_001", "token")
        print(a)
        b = get_login_info("expert_001", "token")
        print(b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    2、config.ini配置文件

    [Host]
    default_host=https://xxx.com
    eu_test_host=https://xxxx.com
    
    [Login]
    expert_001_account=123
    expert_001_password=123456
    
    
    [Header]
    #en-US、zh-CN
    accept-language=en-US
    
    [Version]
    tech_app_version=V2.10.16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    c++析构函数
    拿到这份Java面试文档“狂刷”2周,成功拿到阿里P7+的offer
    让前端和后端要“动手”的7大行为,你中了几个。
    说说C/C++编译的那些事儿
    GA4如何搭建转化目标?
    Python入门教学——self
    Java学习笔记:SQLite数据库
    jvm 各个版本支持的参数
    ubuntu18.04 安装网卡i219-LM驱动
    vivo 商品中台的可视化微前端实践
  • 原文地址:https://blog.csdn.net/weixin_45451320/article/details/126525955