遇到的问题
pytest在用例失败的情况下,再次重试用例,导致pytest-timeout插件无法正常使用,示例如图
对应报告如图
在对应插件上寻找问题
https://github.com/pytest-dev/pytest-timeout/issues/18
解决方式
不要同时使用pytest-timeout与pytest-rerunfailures,这会导致pytest-timeout的超时判断无效,且此判断方式有悖于插件设计的初衷
可以不使用超时插件,改为自定义装饰器来判断用例超时问题,如下
def timeout(seconds=5):
"""返回装饰器的函数,实现用例超时断言"""
def decorator(func):
def handler(signum, frame):
raise Exception(f'E Failed: Timeout >{seconds}s') from None
@functools.wraps(func)
def wrapper(*args, **kwargs):
# 设置信号处理器,在超时时触发 TimeoutError 异常
signal.signal(signal.SIGALRM, handler)
signal.alarm(seconds) # 设置超时时间
try:
return func(*args, **kwargs)
finally:
signal.alarm(0) # 取消超时设置
return wrapper
return decorator
该方式避开了插件冲突的问题,也算一种解决方案吧!!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具