pytest中token的一种处理方法

在某个场景中,各个接口经常需要使用到token,而且接口对频繁登录做了防抖,无法频繁调用。考虑了很多方法,发现总是有一些或多或少的弊端,这里在conftest中定义了一个钩子函数用于处理token。

复制代码
@pytest.fixture(scope="module")
def auth_tokens(refresh_threshold=600):  # 假设刷新阈值为10分钟
    tokens = {}
    def get_or_refresh_token(username):
        token_info = tokens.get(username)
        if not token_info or (time.time() - token_info['timestamp']) > refresh_threshold:
            logger.info(f"没有获取到该账号{username}的token,或者token已过期,重新获取token中")
            token = login_user(username, '222222').response.json()['data']['accessToken']
            tokens[username] = {'token': token, 'timestamp': time.time()}
        logger.info(f"{username}的token为{tokens[username]['token']}")
        return tokens[username]['token']
    return get_or_refresh_token

作用域定义为模块级,在整个模块中只执行一次。

定义了一个get_or_refresh_token闭包,该闭包负责根据用户名获取或刷新token。虽然auth_tokens fixture在模块级别只实例化一次,但是它返回的闭包(get_or_refresh_token)能够对每个传入的用户名进行独立的操作,确保每个账号的token都是根据需要获取或刷新的。

相关推荐
西海天际蔚蓝11 分钟前
用AI写的一个包含web和小程序的个人简历
java
郝学胜-神的一滴15 分钟前
[力扣 227] 双栈妙解表达式计算:从思维逻辑到C++实战,吃透反向波兰式底层原理
java·前端·数据结构·c++·算法
aq553560016 分钟前
数字资源分发的技术革命与未来趋势
java·开发语言·python·php
蚰蜒螟20 分钟前
深度剖析:从 clone3 到 start_routine —— Linux 新线程的“破茧成蝶”之旅
java·linux·运维
派大星酷22 分钟前
MCP 工具介绍及编写指南
java·人工智能
梦想的旅途224 分钟前
解构自动化办公新思路:实现外部群聊能力的深度集成与交互
java·数据库·rpa
启山智软24 分钟前
企业如何选择适合自己的电商系统技术架构?(实操落地版)
java·spring·架构·开源·商城开发
淼淼爱喝水25 分钟前
基于DOM型XSS漏洞与利用实验教程
前端·xss·dom·dvwa
invicinble26 分钟前
对于java基础
java·开发语言
knight_9___29 分钟前
RAG面试篇9
java·人工智能·python·算法·agent·rag