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,一经查实,立即删除!

相关文章

springboot项目中切数据库(mysql-> pg)带来的适配问题:typeHandler

一、数据表中有一张表,名为role_permission,DDL如下: CREATE TABLE "public"."role_permission" ( "role_id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, "permiss…

Android11 动态权限申请

1、单个权限检查及申请 private void checkSinglePermission(){// 在需要的地方,如Activity中if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)! PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,…

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

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

外贸拓客软件是否有用

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

Boosting原理代码实现

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

什么是模板字符串?

模板字符串(Template Literals)是ES6(ECMAScript 2015)中引入的一种新的字符串表示方法,允许我们嵌入表达式,并在运行时将它们转换为字符串。模板字符串使用反引号()来定义&#xff…

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__方…

MySQL修改分隔符

1、修改分隔符符号 delimiter $$ 可以修改成$$ //都行 2、创建触发器 函数名称 create trigger 函数名 3、什么样的操作触发,操作那个表 after:之后触发 before:之前触发 insert:插入被触发 update:修改被触发 delete:删除被触发 on 表名 实例&#xff…

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

Ubuntu 22.04 在线安装docker报错E: Package ‘docker-ce‘ has no installation candidate

一、报错描述 在ubuntu 22.01上执行在线安装docker命令时出现E: Package docker-ce has no installation candidate错误。 sudo apt install docker-ce docker-ce-cli containerd.io 下面是详细报错信息 rootubuntu:# sudo apt install docker-ce docker-ce-cli containerd…

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

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

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

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

【太原理工大学】软件系统安全 - 本人认为可能会出的 (最精简!!背!!!)

纯个人猜测,背住最基本的,自己上考场适当加词 1. **零日攻击**:利用未公开的软件漏洞进行的攻击,成功率高,破坏性大。 2. **软件漏洞**:软件设计、编码或运行中的安全缺陷。 3. **恶意代码**:…

3.6. 马氏链-极限分布与周期性

极限分布与周期性 1. 返回次数收敛性1.1. 时间 n n n前访问 y y y次数的极限分布1.2. 时间 n n n前访问 z z z的次数-比率极限定理2. p n ( x , y ) p_n(x,y) pn​(x,y)的极限分布(非周期情形)2.1. 周期的定义和性质2.2. 不可约+非周期+有平稳分布 → ρ n ( x , y ) \righta…

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

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

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

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

C++中的模板方法模式

目录 模板方法模式(Template Method Pattern) 实际应用 数据处理流程 在线教育系统的课程模板 软件开发生命周期 总结 模板方法模式(Template Method Pattern) 模板方法模式是一种行为设计模式,它定义了一个操作…