我有一个简单的测试课

@pytest.mark.incremental
class TestXYZ:

    def test_x(self):
        print(self)

    def test_y(self):
        print(self)

    def test_z(self):
        print(self)

运行此命令时,将得到以下输出:

test.TestXYZ对象位于0x7f99b729c9b0

test.TestXYZ对象位于0x7f99b7299b70

位于0x7f99b7287eb8的testTestXYZ对象

这表示在TestXYZ对象的3个不同实例上调用了3个方法。无论如何,有没有改变这种行为并使pytest在同一个对象实例上调用所有3个方法。这样我就可以使用self来存储一些值。

最佳答案

Sanju在评论中提供了上面的答案,我想引起大家的注意,并提供一个示例。在下面的示例中,您可以使用类的名称来引用类变量,也可以使用相同的语法来设置或操作值,例如在z测试功能中设置y的值或更改test_x()的值。

class TestXYZ():
    # Variables to share across test methods
    x = 5
    y = 10

    def test_x(self):
        TestXYZ.z = TestXYZ.x + TestXYZ.y # create new value
        TestXYZ.y = TestXYZ.x * TestXYZ.y # modify existing value
        assert TestXYZ.x == 5

    def test_y(self):
        assert TestXYZ.y == 50

    def test_z(self):
        assert TestXYZ.z == 15

关于python - 如何为pytest测试类的所有方法共享同一实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45371832/

10-11 06:21