记录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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/705500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中,接口(interface)是一种引用类型,它定义了一组方法、属性、事件或索引器,但不提供实现。接口只定义成员的签名,而具体的实现由实现接口的类或结构体提供。接口使用关键字…

场外期权能不能开户?场外期权在哪里开?

今天带你了解场外期权能不能开户?场外期权在哪里开?近年来,场外期权交易在金融市场上逐渐盛行起来。有许多人对于场外期权的开户问题感到困惑。 场外期权能不能开户? 资质要求: 个人投资者需要具备一定的金融知识和投…

非阻塞IO简介和代码实例

接上篇 阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介-CSDN博客文章浏览阅读90次。阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介https://blog.csdn.net/CSDN_DU666666/article/details/139598410?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%2…

什么是电脑监控软件?六款知名又实用的电脑监控软件

电脑监控软件是一种专为监控和记录计算机活动而设计的应用程序,它能够帮助用户(如家长、雇主或系统管理员)了解并管理目标计算机的使用情况。这些软件通常具有多样化的功能,包括但不限于屏幕捕捉、网络行为监控、应用程序使用记录…

JUnit5学习笔记

1.JUnit5的变化 JUnit 5 JUnit Platform JUnit Jupiter JUnit Vintage JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。 JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模…

『原型资源』Axure自带图标库不够用,第三方经典图标库来袭

​今天小编为大家带来第三方经典图标库,己确认内容可用现推荐给大家。直接上手就可不用自己画哈~ 获取原型文档请与班主任联系! 先睹为快,合适再拿走不谢: 图标太多,截取部分给大家参考o(* ̄︶ ̄*…

恭喜!X医生斩获英国伦敦大学学院访问学者邀请函

伦敦大学学院(University College London,简称:UCL),1826年创立于英国伦敦,是一所公立研究型大学。伦敦大学联盟的创校学院、罗素大学集团和欧洲研究型大学联盟创始成员,也是金三角名校和G5之一…

东胜物流软件 GetProParentModuTreeList SQL注入漏洞复现

0x01 产品简介 东胜物流软件是青岛东胜伟业软件有限公司一款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。该公司初创于2004年11月(前身为青岛景宏物流信息技术有限公司),专注于航运物流相关环节的产品和服务。东胜物流信息管理系统货代版采用MS-SQLser…

雷军出手,光储充一体化赛道可太行了

雷军出手,特斯拉、宁德时代、奥能电源持续加码,光储充一体化赛道可太行了 近几年,各地光储充一体化项目遍地开花,正式投入运营的新闻接连不断。被视为全球能源转型重要驱动力的光储充一体化,已成为各大企业竞相入局的新…

复合机器人以其高度的灵活性和操作效率,展现了显著的优势

随着工业4.0的深入推进和智能制造的快速发展,复合机器人作为一种集成移动机器人和工业机器人功能的先进设备,正逐步成为工业自动化领域的新宠。特别是在磁钢上下料的应用中,复合机器人以其高度的灵活性和操作效率,展现了显著的优势…

【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】

目录 💗一、Python在数据挖掘中的应用💕 💖1.1 数据预处理💞 数据清洗💞 数据变换💞 数据归一化💞 高级预处理技术💞 💖1.2 特征工程💕 特征选择&…

PFC旁路二极管、继电器驱动电路以及PFC主功率

R001和R002以及R003三个电阻作用是限放X电容上的电 整流桥串联两个BJ1和BJ2 电容C3:给整流桥储能,给后续llc供电 PFC工作是正弦波上叠加高频电流 PFC功率部分 2个PFC电感(选择两个磁芯骨架小,有利于散热)、2个续流二极管&…

软件游戏提示msvcp140.dll丢失的原因分析及解决方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“计算机缺失msvcp140.dll”。那么,这个错误是什么意思呢?它会造成哪些问题?小编将从以下几个方面进行详细解析。 一,了解msvcp140.dll是什么 …

虚拟化 之一 详解 jailhouse 架构及原理、软硬件要求、源码文件、基本组件

Jailhouse 是一个基于 Linux 实现的针对创建工业级应用程序的小型 Hypervisor,是由西门子公司的 Jan Kiszka 于 2013 年开发的,并得到了官方 Linux 内核的支持,在开源社区中获得了知名度和吸引力。 Jailhouse Jailhouse 是一种轻量级的虚拟化…

解决使用elmessage 没有样式的问题

错误情况 这里使用了一个消息提示,但是没有出现正确的样式, 错误原因和解决方法 出现这种情况是因为,在全局使用了按需导入,而又在局部组件中导入了ElMessage组件,我们只需要将局部组件的import删除就可以了 import…

企业商家如何精明选择软件开发公司

在当今信息化社会,企业的运营和发展已经离不开软件系统的支持。而选择一个合适的软件开发公司,则成为了企业商家在信息化道路上的一大挑战。那么,究竟如何挑选出既符合业务需求,又能保障项目成功的软件开发公司呢? 明…

MySQL查询数据库中所有表名表结构及注释以及生成数据库文档

MySQL查询数据库中所有表名表结构及注释 生成数据库文档在后面!!! select t.TABLE_COMMENT -- 数据表注释 , c.TABLE_NAME -- 表名称 , c.COLUMN_COMMENT -- 数据项 , c.COLUMN_NAME -- 英文名称 , -- 字段描述 , upper(c.DATA_TYPE) as …

为什么要用AI大模型?

前言 2021 年 8 月份,李飞飞和 100 多位学者联名发表一份 200 多页的研究报告《On the Opportunities and Risk of Foundation Models》,深度地综述了当前大规模预训练模型面临的机遇和挑战。 语言模型已经深刻变革了自然语言处理领域的研究和实践。近…

20240613每日前端-------vue3实现聊天室(二)

看效果图: 今天具体讲下,聊天消息框的布局: 消息框大致分为两块: 别人发来的消息自己发出的消息 元素如下: 头像消息发送人发送时间 html代码设计如下: 整体先用一个div作为外边框,观察上面…

告别“人治”时代,物业运维平台能否成为行业新标准?

随着数字化时代的飞速发展,智能化、数字化已经遍及所有的行业。物业服务企业也不例外,你是否还在想象物业运维工作依旧停留在手动报修、纸质记录的古老时代?那么,你就OUT了,物业运维平台已经悄然崛起,正在以…