pytest并发执行时token异常处理问题

接前面加入钩子函数处理token复用的问题,只保证了用例的串联执行,我的部分测试用例中接入了通义千问的部分接口生成测试数据,七八个场景跑完差不多快要10分钟。考虑使用并发执行。

http://t.csdnimg.cn/ACexL

使用多线程和不使用耗时差距很大,建议还是开启

前置条件:

下载pytest-xdist 这个包 ,直接在终端pip install  pytest-xdist即可

更改pytest.ini 命令行配置 

更改token处理方式,加入锁机制

代码是由之前的代码使用gpt生成的 ,针对token.json文件的锁好像无用,还是会导致登录频繁报错。这里改为对username的锁,保证同一时间同一账号只登录一次。另外,避免出现其他不稳定的情况,建议加上重试 --reruns 2。

# 全局文件锁
token_file_lock = threading.Lock()# 用户级别的锁字典,用于控制对每个用户名的并发访问
user_token_locks = {}def load_tokens_from_file(file_path):with token_file_lock:with open(file_path, 'r') as file:return json.load(file)def save_tokens_to_file(tokens, file_path):with token_file_lock:with open(file_path, 'w') as file:json.dump(tokens, file)def get_user_lock(username):"""获取或创建针对特定username的锁。"""if username not in user_token_locks:user_token_locks[username] = threading.Lock()return user_token_locks[username]def synchronized_per_user(func):"""装饰器,用于同步函数,确保对每个username的操作是线程安全的"""@wraps(func)def wrapper(username, *args, **kwargs):user_lock = get_user_lock(username)with user_lock:return func(username, *args, **kwargs)return wrapper@pytest.fixture(scope="module")
def auth_tokens(refresh_threshold=600, file_path='tokens.json'):tokens = load_tokens_from_file(file_path)@synchronized_per_userdef get_or_refresh_token(username):nonlocal tokenstoken_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是一个模拟的函数,实际应用中需要替换为真实的认证逻辑token = login_user(username, '222222').response.json()['data']['accessToken']tokens[username] = {'token': token, 'timestamp': time.time()}save_tokens_to_file(tokens, file_path)logger.info(f"{username}的token为{tokens[username]['token']}")return tokens[username]['token']return get_or_refresh_token

这里还有个疑问,加上并发执行后,控制台打印的中文日志全变成了乱码,不明所以,后续有时间再看看怎么解决

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别传统测绘,WebGIS室内办公,工作轻松又高薪!

为什么说webgis相比传统测绘具有更广阔的发展前景? 我们从以下4个角度进行说明。 1、从工作类型看,WebGIS有更多积累 相信接触过测绘的小伙伴都知道,测绘外业和内业的岗位性质来看,基本没有什么上升空间,也谈不上什么积累。 而w…

外贸拓客软件是否有用

外贸拓客软件在帮助外贸企业提高拓客效率和成功率方面确实非常有用。以下是外贸拓客软件的主要优点和功能,通过参考文章中的相关数字和信息进行归纳: 1. 提高效率 自动化与集成功能:外贸拓客软件通过自动化和集成功能,显著减少了…

Boosting原理代码实现

1.提升方法是将弱学习算法提升为强学习算法的统计学习方法。在分类学习中,提升方法通过反复修改训练数据的权值分布,构建一系列基本分类器(弱分类器),并将这些基本分类器线性组合,构成一个强分类…

GDB调试相关教程

GDB调试相关教程 相关参考链接 https://wizardforcel.gitbooks.io/100-gdb-tips/content/set-step-mode-on.htmlhttps://wizardforcel.gitbooks.io/100-gdb-tips/content/set-step-mode-on.html 设置程序运行参数 命令set args 10 20 30 40 使用show args显示设置好的运行参…

python __call__(实例化对象的时候返回一个函数,调用这个函数的时候会执行__call__)(将类实例用作回调函数)(类装饰器)

文章目录 Python中的__call__方法深入解析__call__方法简介定义和基本用法为什么要使用__call__方法 __call__方法的高级用法在装饰器中使用__call__(类装饰器:在类中保持状态或进行状态管理)将类实例用作回调函数 结论 Python中的__call__方…

ComfyUI 完全入门:ControlNet 使用教程

今天继续给大家分享 ComfyUI 的入门必备技能:ControlNet。 ControlNet 提供了十几种生成图片的控制方式,有的可以控制画面的结构,有的可以控制人物的姿势,还有的可以控制图片的画风,这对于提高 AI 绘画的质量特别有用…

谷粒商城实战(042集群学习-mysql集群-主从同步)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第361p-第p363的内容 集群 集群的基础形式 MySQL集群 MMM机制 这里使用了vip虚拟ip方式(如192.168.0.101,192.168.0.102&…

深入理解计算机系统 CSAPP 家庭作业6.40

这书真是会绕. A:16*16*4 B:256 ,第一个for 50%不命中 0.5*16*16.第二个for 每两个循环1次不命中 也就是128次 C:0.25

网上书店商城项目采用SpringBoot+Vue前后端分离技术(商家端、移动端、PC端)

项目简介: 本项目基于SpringBootVue2技术设计并实现了一个网上书店商城系统。系统的数据采用MYSQL数据库进行存储,开发工具选择为IDEA或VSCode工具。本商城系统具有前台购物功能和后台相应的信息管理。前台用户登陆注册后可以进行商品浏览、添加购物车、…

茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)

🍵茶艺师服务小程序:品味生活的茶艺新体验🌱 🌿一、引言:茶艺师服务小程序,让生活更有味 在繁忙的生活中,品一杯香茗,感受茶文化的韵味,是许多人向往的休闲方式。然而&…

汇编语言程序设计 - 新建一个文件:d:\abc.txt,从键盘输入文件的内容(不超过100个字符)

80x86汇编习题 题目描述:编写一个程序,新建一个文件:d:\abc.txt,从键盘输入文件的内容(不超过100个字符) 思路: 1,定义好文件名,记得末尾0 2,定义好缓冲区…

高考分数限制下,选好专业还是选好学校?

高考分数限制下,选好专业还是选好学校? 高考作为每年一度的盛大考试,不仅关乎学生们的未来,更承载了家庭的期望。2004年高考刚刚结束,许多考生和家长已经开始为填报志愿而焦虑。选好学校和专业,直接关系到…

windows如何查看硬盘类型(查看磁盘类型)(查看是固态硬盘ssd还是机械硬盘hdd)(Windows优化驱动器——媒体类型)

文章目录 方法:使用Windows优化驱动器1、在任务栏搜索框中输入“优化驱动器”并打开它。2、在优化驱动器的窗口中,查看每个驱动器旁边的“媒体类型”。3、如果列出的是“固态驱动器”,那么它是SSD;如果是“硬盘驱动器”&#xff0…

图像分割——U-Net论文介绍+代码(PyTorch)

0、概要 原理大致介绍了一下,后续会不断精进改的更加详细,然后就是代码可以对自己的数据集进行一个训练,还会不断完善,相应其他代码可以私信我。 一、论文内容总结 摘要:人们普遍认为,深度网络成功需要数…

Ansible离线部署 之 Zabbix

Ansible介绍 Ansible 是一个自动化平台,用于 IT 自动化,如配置管理、应用部署、任务自动化等。Ansible 使用 SSH 来连接到远程机器,并执行预定义的任务。Ansible 的主要特点是其简单性、易用性和强大的功能集。 以下是 Ansible 的一些关键特…

vs2022配置openvino环境(无需修改系统环境变量)

openvino版本:2022.3.0 opencv版本:4.8.0 配置openvino Release版本 (一)右键打开项目的属性 (二)配置opencv和openvino的环境(路径根据自己的安装路径进行修改)

禁用/屏蔽 Chrome 默认快捷键

Chrome 有一些内置的快捷键,但是它并没有像其他软件一样提供管理快捷键的界面。在某些时候,当我们因为个人需求希望禁用 Chrome 某些快捷键时,又无从下手。 好在有开发者开发了 Chrome 插件,可以禁用 Chrome 快捷键的插件&#x…

文心一言 VS 讯飞星火 VS chatgpt (284)-- 算法导论21.2 2题

二、对定理 21.1 的整体证明进行改造,得到使用链表表示和加权合并启发式策略下的 MAKE-SET 和 FIND-SET 的摊还时间上界为 O(1),以及 UNION 的摊还时间上界为 O(lgn)。如果要写代码,请用go语言。 文心一言: 在Go语言中实现使用链…

红黑树插入数据的底层详解

红黑树定义 1. 每个结点不是红色就是黑色 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个孩子结点是黑色的 4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色节点 5. 每个叶子结点都是黑色的(此…

大模型下一步在哪里?王小川、杨植麟等给出回答 “苹果智能”何时可用?

大模型下一步在哪里 AI大模型是正在进行的新一轮技术革命,它最终能否通向AGI,在技术研发和商业落地之间该如何权衡,这是当下需要厘清的核心议题。 6月14日,在2024北京智源大会上,百川智能CEO王小川、智谱AI CEO张鹏、…