我需要根据不同的数据生成一些相似的测试。我尝试过
但结果是:
import pytest
class BaseClass(object):
data = [1]
@pytest.mark.parametrize("param1", data)
def test_something(self, param1):
assert param1
class Test1(BaseClass):
data = [2, 3]
class Test2(BaseClass):
data = [0]
但结果是:
collected 2 items
test_of_pytest.py::Test1::test_something[1] PASSED [ 50%]
test_of_pytest.py::Test2::test_something[1] PASSED [100%]
而不是预期的类似于:
collected 3 items
test_of_pytest.py::Test1::test_something[2] PASSED [ 33%]
test_of_pytest.py::Test1::test_something[3] PASSED [ 66%]
test_of_pytest.py::Test2::test_something[0] FAIL [100%]
当读取BaseClass
时,@pytest.mark.parametrize
仅运行一次。
如何处理parametrize
(或其他一些生成器),使其按照我期望的那样运行?
pytest
does not work like that, what you need is fixtures, but even more so why setdata
in theBaseClass
- gold_cyBase.data
;新的装饰函数附加到类上,子类中没有任何剩余的运行。这不仅适用于pytest.mark.parametrize
,而且可以在任何类和任何装饰方法中重现。 - hoefling