当我在项目中运行nosetests
时,执行总是需要至少2秒,即使没有测试,或者测试很简单(例如assert_equal(1,1)
)
为什么测鼻会这么慢?
2秒可能看起来不长,但它确实无法实现快速抽搐的开发周期。
这已经困扰了我很长时间---如果可能的话,我希望能够实现优雅的解决方法。
编辑:添加了重现的代码。
这是test_nose_stuff.py
:
from nose.tools import assert_equal, assert_dict_equal
def test_stuff():
pass
从仅包含该文件的目录:
$ time nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
real 0m1.103s
user 0m0.585s
sys 0m0.237s
在重复试验中,实际执行时间从0.5秒到1.2秒不等。
我正在运行python 2.7.13,通过conda安装,nosetests版本1.3.7。
答案 0 :(得分:3)
我决定对其进行分析,nose
在启动时花费大部分时间来初始化pkg_resources
(来自setuptools
的插件框架)
我的分析脚本看起来基本上是这样的:
python -m cProfile -o stats.pstats $(which nosetests)
gprof2dot.py --skew=.1 -wn3 -f pstats stats.pstats | dot -Tsvg -o stats.svg
我正在使用的gprof2dot.py
是实际项目的一个分支,所以svgs没有破坏:https://github.com/Yelp/gprof2dot
https://i.fluffy.cc/6KxlHKw44TSbdn2WGkWtskBrfd4RdpBK.svg
如果安装了许多软件包,pkg_resources
需要很长时间才能初始化。
这个最小的pip冻结:
$ pip freeze
nose==1.3.7
wheel==0.24.0
$ time nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
real 0m0.166s
user 0m0.120s
sys 0m0.012s
安装了更多软件包:
$ pip freeze | wc -l
430
$ time nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
real 0m0.501s
user 0m0.360s
sys 0m0.076s
此时间显着增加