当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 加油卡APP开发,汽车加油便捷新方式
  • C++:调整数组顺序使奇数位于偶数前面【面试】
  • 创新共享经济:探索Web3对新商业模式的启迪
  • 【Python入门与进阶】Python函数的定义与使用
  • 随手记:商品信息过多,展开收起功能
  • Java-集合类-Arrays.asList()使用需要注意的大坑
  • 综合数据分析及可视化实战
  • 力扣hot100:394. 字符串解码(递归/括号匹配,字符串之间相对顺序)
  • 放弃Venn-Upset-花瓣图,拥抱二分网络
  • 无公网IP与服务器完成企业微信网页应用开发远程调试详细流程
  • 36、matlab矩阵特征值、特征向量和奇异值
  • 【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】
  • 基于MCGS的双容水箱液位控制系统设计【MCGS+MATLAB+研华工控机】
  • 【第六篇】SpringSecurity的权限管理
  • Mac 下载并激活IDEA
  • @angular/forms 源码解析之双向绑定
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 0x05 Python数据分析,Anaconda八斩刀
  • ESLint简单操作
  • IDEA常用插件整理
  • JAVA SE 6 GC调优笔记
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 百度地图API标注+时间轴组件
  • 创建一个Struts2项目maven 方式
  • 从零搭建Koa2 Server
  • ------- 计算机网络基础
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 网页视频流m3u8/ts视频下载
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #100天计划# 2013年9月29日
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma multi_compile #pragma shader_feature
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (¥1011)-(一千零一拾一元整)输出
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (八)c52学习之旅-中断实验
  • (二)windows配置JDK环境
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (学习日记)2024.01.09
  • (译) 函数式 JS #1:简介
  • (转)scrum常见工具列表
  • **PHP二维数组遍历时同时赋值