You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pytest启动速度过慢(执行pytest -h需11秒)的优化咨询

问题结论

这种情况完全不正常,正常场景下pytest执行pytest --version、pytest -h这类无业务逻辑关联的简单命令,耗时应该在1秒以内。

根因分析

从你提供的性能分析结果可以明确问题根源:
pytest启动阶段加载根目录conftest.py时,连带导入了segmentation.py、object_statistics.py等业务代码,你的业务代码中包含numba JIT编译逻辑(性能日志中的ufuncbuilder、compiler相关调用都是JIT编译的特征),这类编译逻辑在模块导入阶段就会执行,直接吃掉了绝大多数启动耗时。
你安装的多个pytest插件也可能带来额外的加载开销,但不是核心瓶颈。

加速方案

  • 优化conftest.py导入逻辑:不要在conftest的全局作用域导入业务代码,所有业务相关的导入都挪到fixture内部、测试用例内部执行;如果必须有全局依赖,优先使用延迟导入(比如函数内部import,或者用importlib实现懒加载),避免pytest启动加载conftest时就触发业务模块的导入和JIT编译。
  • 定位高开销pytest插件:执行pytest --trace-config可以查看每个插件的加载耗时,也可以逐个禁用插件验证开销:pytest -p no:插件名 --version,比如pytest -p no:pytest-cases --version,定位到高开销插件后,可以选择替换为轻量方案,或者仅在需要用到对应功能的时候启用插件。
  • 关闭开发阶段不必要的JIT编译:如果你的业务代码使用了numba这类JIT编译工具,开发阶段可以设置环境变量NUMBA_DISABLE_JIT=1关闭JIT,仅在性能测试、正式运行场景开启,能大幅降低模块导入耗时。
  • 拆分conftest.py:如果你的根目录conftest.py里存放了大量不同业务模块的fixture,可以把fixture拆分到对应测试子目录下的conftest.py中,避免pytest启动时一次性加载所有fixture的依赖。

内容的提问来源于stack exchange,提问作者gebbissimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:15:04