我正在用TDD编写一些代码,并具有一个类似于以下的测试(请注意,我正在使用pytest-describe,但是在没有附加格式的情况下使用测试时,也会出现相同的问题)
import numpy as np
import pytest
from maszcal.emulator import LensingEmulator, LargeErrorWarning
class FakeInterpolator:
def __init__(self, coords, grid):
pass
def process(self):
pass
def interp(self, coords):
return np.ones(tuple(c.size for c in coords))
def describe_emulator():
def describe_error_check():
@pytest.fixture
def emulator(mocker):
mocker.patch('maszcal.emulator.RbfInterpolator', new=FakeInterpolator)
lensing_emulator = LensingEmulator()
lensing_emulator.generate_grid = lambda coords: np.ones(tuple(c.size for c in coords))
return lensing_emulator
def other_test_1(emulator):
do_stuff_with_emulator...
即使使用pytest --collectonly
,该测试也需要2.5到3秒才能运行。导入LensingEmulator
时,它会像这样从maszcal.interpolate
模块导入:
spec/emulator/LensingEmulator.py
imports ↑
maszcal/emulator.py
imports ↑
maszcal/interpolate.py
imports ↑
GPy
其中GPy是一个外部模块。当然,还存在其他依赖关系,但是奇怪的是,如果我从import GPy
中删除maszcal.interpolate
行,则加速时间将达到0.9ish秒,而不是2.5-3秒。
我对这种行为很困惑,因为单独导入模块并不那么慢,但是它增加了测试收集阶段的时间。解决此问题的正确方法是什么?