为什么nosetests在执行前会等待两秒钟?

时间:2017-05-08 18:50:29

标签: python nose

当我在项目中运行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。

1 个答案:

答案 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

此时间显着增加