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

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

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

相关文章

算法第9章 图算法设计

7-1 旅游规划 #include <iostream> #include <algorithm> #include <cstring> using namespace std; typedef pair<int,int> PII; const int N 510; int g[N][N]; int n,m,s,d; int dist[N]; int w[N],t[N][N]; bool st[N]; void dijkstra(){ memset…

C++和C语言到底有什么区别?

引言&#xff1a;C和C语言是两种非常常见的编程语言&#xff0c;由于其广泛的应用和灵活性&#xff0c;它们在计算机科学领域内受到了广泛的关注。虽然C是从C语言发展而来的&#xff0c;但是这两种语言在许多方面都有所不同。本文将对C和C语言进行比较和分析&#xff0c;以便更…

Modbus通信协议(1)--基础知识

一、基础知识 1.信息的划分 2.基本概念 3.机器数和真值 4.原码、反码与补码 5.存储单位 6.基本类型数据 7.数的浮点表示 8.各种进位制的对比 9.十进制 10.二进制 11.十六进制 12.不同进制的换算 13.位的标记 二、常用的信息编码 1.西文字符的计算机表示 2.汉字处理过程 3.汉字…

C++:列表初始化

文章目录 {}初始化std::initializer_listautodecltypenullptr {}初始化 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如&#xff1a; struct Point {int _x;int _y; };int main() {// 数组初始化int array1[] { 1, 2, 3, 4, 5…

如何用ai写文案?分享方法和软件!

在当今数字化时代&#xff0c;内容创作已经成为各行各业不可或缺的一部分。然而&#xff0c;对于许多创作者来说&#xff0c;如何写出既具有吸引力又符合平台特点的文案&#xff0c;却是一项不小的挑战。幸运的是&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展…

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

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

03试验范式V1.1

对应视频链接点击直达 01项目点击下载&#xff0c;可直接运行&#xff08;含数据库&#xff09; 03试验范式V1.1 对应视频链接点击直达当前试验情况事件分类操作方案计时误差控制分析方案 遇到的主要问题--干扰很强--有时候还能直接假死硬件嵌入式解决方案唯二解决方案 结语其…

uniapp 仿写弹窗

页面 <template><view click"close" class"mask"><view click.stop"onClick" class"content"><text class"text">点击蒙层关闭</text></view></view> </template><scr…

JDBC连接HANA

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import com.sap.db.jdbc.Driver; public class HanaMultiTenantConnection {public static void main(String[] args) {// 数据库驱动类名String driver "com.sap.db.jdbc.Dr…

江协科技51单片机学习-0 购买套件

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

Blender雕刻建模_UV展开

UV展开的标准&#xff1a;展平&#xff0c;不重叠&#xff0c;均匀展开 ZenUV插件 切到边模式 -Mark&#xff0c;标记缝合边 -Unmark&#xff0c;取消标记 -Unmark All&#xff0c;全部取消标记 -Mirror Seams&#xff0c;镜像缝合边 -Zen Unwrap&#xff0c;全部展开 纹…

低代码开发平台助力企业快速响应市场需求

随着数字化转型的深入推进&#xff0c;企业对软件开发的需求日益增长。然而&#xff0c;传统的软件开发模式面临着周期长、成本高、维护难等问题&#xff0c;难以满足市场的高速变化。在这样的背景下&#xff0c;低代码开发平台应运而生&#xff0c;为企业提供了一种高效、灵活…

web端使用高德地图

web端使用高德地图 一、申请高德key和秘钥二、在项目中引入所需功能js、css文件三、实现地图选点、回显选点四、自定义地图 一、申请高德key和秘钥 申请高德key 申请成功后可以得到key 二、在项目中引入所需功能js、css文件 <script src"https://webapi.amap.com/m…

使用sersync整合rsync,实现WEB页面同步更新,亦可做数据备份之用

--> webser1[webroot] 192.168.0.16/ sersyncrsync---> webser2[webroot] 192.168.0.20192.168.0.15(/webroot&#xff09;\--> webser3[webroot] 192.168.0.8原理: 通过Linux内核的inotify 机制&#xff0c;根据源目录的变化情况&#xff0c;安排触发更新式的rsyn…

Git忽略规则(.gitignore配置)不生效原因和解决方案

Git忽略规则(.gitignore配置&#xff09;不生效原因和解决方案 Git忽略规则(.gitignore配置&#xff09;不生效原因和解决方案 重点 .gitignore中已经标明忽略的文件目录下的文件&#xff0c;git push的时候还会出现在push的目录中&#xff0c;或者用git status查看状态&…

unity2d Ugui--Image城市道路汽车行驶

目录 1.车辆生成与回收 2.路径点控制 3.车辆控制 1.车辆生成与回收 using System.Collections.Generic; using UnityEngine;public class RoadContr : MonoBehaviour {public WayPoint[] wayPoints; //出生点public Transform pare;[SerializeField]private Car[] fabCar;pu…

node调试

vscode安装插件&#xff1a;JavaScript Debugger (Nightly) 点击后生成一个launch.json文件 打断点&#xff0c;并发送一个请求来执行代码到断点处 按右上的向下箭头&#xff0c;进入源码&#xff0c;进行查看&#xff0c;左边查看变量等值

IDEA创建简单web(servlet)项目(server为tomcat)

引言 鉴于网上很少有关于IDEA开发servlet项目的教程&#xff08;24版idea&#xff0c;并且servlet技术十分复古&#xff0c;很少有人用到&#xff0c;能够理解&#xff0c;该文章旨在为在校的学生提供一个参考&#xff0c;项目技术简单&#xff09;本人在此总结从头开始到项目…

哪个牌子的儿童护眼灯好?五款平价护眼台灯推荐

护眼台灯在近年来成为家长和长时间使用电子设备人群关注的家电/学生产品。对于家中有孩子或经常面对电子屏幕的人士来说&#xff0c;很多人可能已经对这类产品有所了解并进行了购买。然而&#xff0c;部分家长对护眼台灯的认识还不够深入&#xff0c;因此尚未为孩子选择一款合适…

无公网IP与服务器完成企业微信网页应用开发远程调试详细流程

文章目录 前言1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 前言 本文主要介绍如何在企业微信开发者中心通过使用内网穿透工具提供的公网域名成功验证回调本地接口服务! …