首页 > 解决方案 > 在pytest中重用数据结构

问题描述

我正在研究一个相当通用的 Python 数据结构,同时为每一个功能编写测试。大多数测试重新实例化相同的结构,即使用相同的值,以便可以测试特定的方法。例如:

class T():
    def __init__(self, data):
        self.data = data

    def min(self):
        return 'min'

    def max(self):
        return 'max'

class TestT():
    def test_min():
        t = T(values)

        assert t.min() == 'min'

    def test_max():
        t = T(values)

        assert t.max() == 'max'

重用这个t实例的正确方法是什么?我才刚刚开始,测试开始需要很长时间才能执行。我想加快他们的速度。

注意:我知道我可以parametrize并且getattr在这个特定的示例中,但它仍然会实例化t两次,每次测试一次。

尝试

我查看了pytest.fixtures但是似乎让一个夹具返回这t只会做同样的事情,重新实例化它。

Pytest 缓存似乎是为此而制作的,但我从文档中不明白如何使用它(request示例中有什么?)。

最后,仅存储t在(类)变量中似乎并不能加快测试速度。

标签: pythoncachingpytest

解决方案


看来我对 pytest 夹具的理解是不完整的。以下工作正常:

class Test():
    @pytest.fixture(scope='class')
    def data(self):
        return ...

    def test_min(data):
        assert data.min() == 'min'

    def test_max(data):
        assert data.max() == 'max'

推荐阅读