使用测试夹具作为 class 方法进行测试 (PyTest)

Tests with test fixtures as class methods (PyTest)

PyTest 中组织测试时,我看到可以在测试 class 中定义测试方法,如下所示:

class TestBasicEquality:
    def test_a_equals_b(self):
        assert 'a' == 'b'

如果我们想编写一个必须使用 PyTest 夹具的测试 (test_client) client 我们会这样做:

def test_client(client):
    # assert client.something == something

但是我们如何在测试 class 中组织 test_client?我尝试使用 @pytest.mark.usefixtures(client) 作为测试 class 的装饰器,但没有成功。

谁能告诉我如何 and/or 指向 guide/documentation 以便我理解?

也许 隐藏在这一切背后的一个问题:我们什么时候应该(或不应该)将 pytest 测试放在 class 中? (现在才开始学习PyTest..) ?

在您给定的情况下,您只需将夹具作为另一个方法参数包括在内:

class TestSomething:
    def test_client(self, client):
        assert client.something == "something"

那么 类 有什么用呢?就个人而言,我很少需要将它们与 pytest 一起使用,但您可以将它们用于:

  1. 在一个文件中进行多组测试,并且能够 运行 只有一组:pytest ./tests/test.py::TestSomething
  2. 为每个测试方法执行一个夹具,而这些方法不一定需要访问夹具本身。 example from the documentation 是每个方法之前的自动清理。那就是你发现的@pytest.mark.usefixtures()
  3. 有一个 automatically run once for every test class by defining a fixture's scopeclass 的夹具:@pytest.fixture(scope="class", autouse=True)