记录pytest中场景执行的token异常处理问题

前言中写了一个conftest钩子函数用于处理重复调用token的方法,http://t.csdnimg.cn/N4rCK,每个用例单独执行都很正常,但是批量执行时一直报错,token缓存处理也不生效。

所有的用例都报获取不到token,方法改了又改,浪费半天时间还是没有发现任何问题。各个地方加入日志排查原因,如下提示锁定原因。 

缓存机制添加的是600s,这里提示间隔1400s,很明显不太正常,第一个用例和第二个用例之间怎么可能差距这么大呢?

回头再看看用例执行的顺序及情况

注册==>登录 这一步执行的非常快,每次都能成功,且账号和我后续用例的账号是一个账号。登录这里并没有修改token.json文件,即缓存对应账号的token值。这就导致我第二条用例使用同一账号登录时,报错登录频繁,被拦截。直到后台防抖设置的时间结束后,才能正常登录。

两种解决办法

1.直接跳过注册==>登录这一用例

2.注册==>登录 这一测试步骤,采用其他账号登录,避免后续的防抖校验

3.注册==>登录  执行完后修改token缓存

最后贴一下  修改后的token缓存代码

def load_tokens_from_file(file_path):
    try:
        with open(file_path, 'r') as file:
            return json.load(file)
    except FileNotFoundError:
        return {}

def save_tokens_to_file(tokens, file_path):
    with open(file_path, 'w') as file:
        json.dump(tokens, file)

def get_or_refresh_token(tokens, username, refresh_threshold=600):
    file_path = 'tokens.json'
    token_info = tokens.get(username)
    if not token_info or (time.time() - token_info['timestamp']) > refresh_threshold:
        logger.info(f"没有获取到该账号{username}的token,或者token已过期,重新获取token中  当前时间为{time.time()}  时间间隔为{time.time() - token_info['timestamp']}")
        # 假设 login_user 和 refresh_token 函数是已经定义的获取新 token 的函数
        token = login_user(username, '222222').response.json()['data']['accessToken']
        tokens[username] = {'token': token, 'timestamp': time.time()}
        logger.info(f'tokens[{username}]的值为{tokens[username]}')
        save_tokens_to_file(tokens, file_path)  # 将更新后的 tokens 保存到文件中
    logger.info(f"{username}的token为{tokens[username]['token']}")
    return tokens[username]['token']

@pytest.fixture(scope="module")
def auth_tokens(file_path='tokens.json'):
    tokens = load_tokens_from_file(file_path)
    return lambda username: get_or_refresh_token(tokens, username)

相关推荐

  1. pytesttoken一种处理方法

    2024-06-14 10:04:04       30 阅读
  2. pytestfixture异常处理

    2024-06-14 10:04:04       33 阅读
  3. pytest中文使用文档----12缓存:记录执行状态

    2024-06-14 10:04:04       32 阅读
  4. Python 异常处理

    2024-06-14 10:04:04       70 阅读
  5. Python异常处理

    2024-06-14 10:04:04       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-14 10:04:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-14 10:04:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-14 10:04:04       82 阅读
  4. Python语言-面向对象

    2024-06-14 10:04:04       91 阅读

热门阅读

  1. Unity3D MMORPG角色装备穿戴详解

    2024-06-14 10:04:04       34 阅读
  2. uniapp开发微信小程序预览文件+图片+嵌套网页

    2024-06-14 10:04:04       31 阅读
  3. Controller 自动化日志输出

    2024-06-14 10:04:04       32 阅读
  4. 物联网复习

    2024-06-14 10:04:04       21 阅读
  5. 【VUE】VUE安装包,怎么检查全部依赖包版本?

    2024-06-14 10:04:04       37 阅读
  6. redis 一主两从三哨兵

    2024-06-14 10:04:04       31 阅读
  7. UltraISO 未找到虚拟光驱

    2024-06-14 10:04:04       31 阅读
  8. 代码随想录第三十七天打卡

    2024-06-14 10:04:04       31 阅读