有没有替代方法在py.test类中为每个变量创建一个fixture?

时间:2016-06-03 11:26:06

标签: pytest fixtures

我想在我所有的py.test类方法中使用一些常用数据,并且仅在该类中使用,例如。

n_files = 1000
n_classes = 10
n_file_per_class = int(n_files / n_classes)

我发现我可以使用灯具,例如:

class TestDatasplit:

    @pytest.fixture()
    def n_files(self):
        return 1000

    @pytest.fixture()
    def n_classes(self):
        return 10

    @pytest.fixture()
    def n_files_per_class(self, n_files, n_classes):
        return int(n_files / n_classes)

    def test_datasplit_1(self, n_files):
        assert n_files == 1000

    def test_datasplit(self, n_files_per_class):
        assert n_files_per_class == 100

但是在这里我需要为我的所有变量创建一个fixture,但这看起来非常冗长(我有超过3个变量)......

在py.test类中创建一堆共享变量的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您的测试似乎没有改变这些值,因此您可以使用模块级或类级常量。 Pytest fixture用于为每个测试提供一个单独的值副本,这样当一个或多个测试改变值时,测试不会开始相互依赖(或无意中使彼此失败)。

答案 1 :(得分:0)

我同意@ das-g所说的内容,但是如果你想使用灯具,那么你可以拥有一个基于自定义类返回对象的灯具,或者例如一个namedtuple