我有两个 Pytest 类:一个测试类非常快,另一个测试类较慢,通过函数调用参数化自身并在多个测试中重用该资源。
我的问题是,当通过
pytest test.py -k "Quick"
运行较快的测试时,我必须等待较慢的测试被参数化,然后才能运行指定的测试。
class TestQuick:
def test_quick(self): pass
@pytest.mark.parametrize('num', get_nums())
class TestSlow
def test_1(self, num): pass
def test_2(self, num): pass
def get_nums():
inputs = range(100)
with multiprocess.Pool(10) as pool:
return list(pool.map(IO_fn, # takes a lot of time
inputs))
我试过使用
@pytest.mark.parametrize('num', get_nums(), indirect=True
),但我无法让它工作。
我也尝试在
@pytest.fixture(scope='class')
上使用IO_fn
,这是几乎在那里除了:
nums
的关键能力。TestSlow/num/test
分组,而不仅仅是 TestSlow/test
.有点“肮脏”的黑客来解析输入参数并在遇到
Quick
标签时停止执行长进程:
import sys
import pytest
def get_nums():
if sys.argv[-1] == 'Quick':
return []
inputs = range(100)
with multiprocess.Pool(10) as pool:
return list(pool.map(IO_fn, inputs))
class TestQuick:
def test_quick(self): pass
@pytest.mark.parametrize('num', get_nums())
class TestSlow:
def test_1(self, num): pass
def test_2(self, num): pass
测试:
pytest test.py -k "Quick"
——跑得快
pytest test.py -k "Slow"
— 运行缓慢