【发布时间】:2016-03-03 16:35:59
【问题描述】:
我目前正在为一个中型库(约 300 个文件)编写测试。 该库中的许多类共享使用 pytest 编码的相同测试方案:
文件 test_for_class_a.py:
import pytest
@pytest.fixture()
def setup_resource_1():
...
@pytest.fixture()
def setup_resource_2():
...
@pytest.fixture()
def setup_class_a(setup_resource_1, setup_resource_2):
...
def test_1_for_class_a(setup_class_a):
...
def test_2_for_class_a(setup_class_a):
...
class_b、class_c 等存在类似文件...唯一的区别是 setup_resource_1 和 setup_resource_2 的内容。
现在我想重新使用在 test_for_class_a.py、test_for_class_b.py 和 test_for_class_c.py 中定义的夹具 setup_class_a、setup_class_b、setup_class_c 对它们运行测试。
在文件 test_all_class.py 中,这是可行的,但每个测试仅限于一个夹具:
from test_for_class_a import *
@pytest.mark.usefixtures('setup_class_a') # Fixture was defined in test_for_class_a.py
def test_some_things_on_class_a(request)
...
但我正在寻找一种更通用的方法:
from test_for_class_a import *
from test_for_class_b import * # I can make sure I have no collision here
from test_for_class_c import * # I can make sure I have no collision here
==> @generate_test_for_fixture('setup_class_a', 'setup_class_b', 'setup_class_c')
def test_some_things_on_all_classes(request)
...
有什么办法可以做到这一点吗? 我一直在研究工厂的工厂和抽象的 pytest 工厂,但我正在为 pytest 定义夹具的方式而苦苦挣扎。 有没有办法解决这个问题?
【问题讨论】: