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)

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值