如何用Pytest夹具定义其他实例变量

问题描述:

我想运行一系列Python单元测试,它们都共享相同的setUp方法。但是,测试的一个子集需要更大,更具体的一组变量。实现这一点的一种方法是定义一个辅助功能,并在“更具体”测试每次调用它:如何用Pytest夹具定义其他实例变量

import unittest 

class TestFixtures(unittest.TestCase): 
    def setUp(self): 
     self.a = 1 

    def additional_setup(self): 
     self.b = 1 

    def test_check_value(self):   # Ordinary test 
     self.assertEqual(self.a, 1) 

    def test_add_variables(self):  # More specific test requiring 'self.b' to be defined 
     self.additional_setup() 
     self.assertEqual(self.a + self.b, 2) 

if __name__ == "__main__": 
    unittest.main() 

在我看来,这样可以更优雅的使用Pytest fixtures来完成,但没有一个实例我看到使用固定装置和传统的方法setUp。我怎样才能使用Pytest fixture来定义其他变量?

什么我试过到目前为止

其实我一直无法简单地定义一个变量来使用夹具后测试的情况下使用。例如,

import pytest 
import unittest 

class TestFixtures(unittest.TestCase): 
    @pytest.fixture 
    def additional_setup_fixture(): 
     b = 1 

    def test_use_fixtures(additional_setup_fixture): 
     print b 

if __name__ == "__main__": 
    unittest.main() 

产生NameError: global name 'b' is not defined.。我怎样才能定义变量用于测试(或者创建本地变量或实例变量)与Pytest夹具?

下面是Pytest夹具大致等效试验:

import pytest 

@pytest.fixture 
def generate_variables(): 
    a = 1 
    b = 2 
    return a, b 

def test_trivial(generate_variables): 
    a, b = generate_variables 
    assert a+b == 3 

if __name__ == "__main__": 
    pytest.main([__file__]) 

据我所知,使用Pytest当它不再需要为测试是一类从unittest.TestCase继承的方法。在test_trivial之内,局部变量generate_variablesgenerate_variables函数(即,元组(a, b))的输出,而不是函数本身,因为它用装饰器标记了@pytest.fixture