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都是根据需要获取或刷新的。

相关推荐
橘子编程2 分钟前
Tomcat全栈指南:从入门到精通
java·tomcat
hrhcode7 分钟前
【java工程师快速上手go】三.Go Web开发(Gin框架)
java·spring boot·golang
敖正炀8 分钟前
CountDownLatch 详解
java
海兰9 分钟前
【Spring AI】从一个MCP小实例开始
java·人工智能·spring
han_16 分钟前
JavaScript设计模式(十):模板方法模式实现与应用
前端·javascript·设计模式
Rick199317 分钟前
Spring Boot自动装配原理
java·spring boot·后端
得物技术19 分钟前
立正请站好:一个组件复用 Skill 的工程化实践|得物技术
前端·架构·ai编程
我命由我1234522 分钟前
Android Jetpack Compose - 组件分类:布局组件、交互组件、文本组件
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
Devin~Y25 分钟前
大厂内容社区面试实录:从 Spring Boot 微服务到 AI RAG 问答(附详细解析)
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
Lenyiin26 分钟前
Python数据类型与运算符:深入理解Python世界的基石
java·开发语言·python