如何用pytest为函数设置执行超时,检测是否陷入无限循环?
pytest 检测函数超时(无限循环)的现成方案
直接用pytest-timeout插件就能搞定,不用自己编写线程/进程逻辑,步骤如下:
- 安装插件
执行命令:
pip install pytest-timeout
- 两种使用方式
- 针对单个测试用例:给目标测试函数加
@pytest.mark.timeout(x)装饰器,x为允许的最大执行时长(单位秒)。示例:
import pytest from your_module import problematic_func @pytest.mark.timeout(5) # 设定5秒超时阈值 def test_func_not_infinite_loop(): problematic_func()
运行测试时,若problematic_func执行超过5秒,pytest会直接终止该用例并标记为失败,刚好匹配“超时时长判定为无限循环”的需求。
- 全局配置所有用例:在项目根目录的
pytest.ini中添加配置,让所有测试用例统一应用超时限制:
[pytest] timeout = 5 # 全局设置5秒超时
- 额外说明
pytest-timeout底层已封装线程/进程的超时控制逻辑,默认模式可覆盖绝大多数场景。如果你的函数涉及特殊IO操作或多线程场景,可通过timeout_method参数指定运行模式(比如thread或signal)。
内容的提问来源于stack exchange,提问作者Rizhiy
相关产品推荐
相关产品推荐

