因此,我在conftest.py
文件中定义了fixture,scope=“class”,因为我希望在调用每个测试类之前运行它们。conftest文件放在项目根目录中,以便每个测试模块都能看到它。
现在在一个测试模块中,我有另一个setup函数,我只想为那个模块运行一次。但问题是setup_class()
方法在运行conftest.py中定义的fixture之前被调用。这是预期的吗?我希望它是相反的,因为我想使用conftest中定义的fixture中完成的一些事情。如何做到这一点?
代码-
conftest.py:
@pytest.fixture(scope="class")
def fixture1(request):
#set a
@pytest.fixture(scope="class")
def fixture1(request):
测试_1.py:
@pytest.mark.usefixtures("fixture_1", "fixture_2")
class Test1():
#need this to run AFTER the fixture_1 & fixture_2
def setup_class():
#setup
#get a set in fixture_1
def test_1()
.....
我知道我可以简单地在测试文件中定义一个fixture而不是setup_class,但是我必须在每个测试方法的参数中指定它,这样它才能被pytest调用。
3条答案
按热度按时间szqfcxe21#
我也遇到了同样的问题。直到现在我才意识到问题可能是setup_class在fixture之前被调用〉-/我认为这个问题类似于这个问题Pytest - How to pass an argument to setup_class?。问题是混合了unittest和pytest方法。我差不多做了他们建议的-我省略了setup_class并在特定的测试文件中创建了一个新的fixture。调用conftest.py中的fixture。到目前为止,它是有效的。
0mkxixxg2#
问题是你只能在
pytest
运行的测试函数(或方法)中使用fixture的结果。在这里我可以建议一个变通方法。但是当然我不确定它是否适合你的需要。解决方法是从测试方法调用函数:
conftest.py
测试_1.py
gz5pxeao3#
Fixtures和
setup_class
是初始化测试函数(和类)的两种不同的范例。类作用域的fixture在单个测试函数(方法)运行时运行。另一方面,setup_class
在它们之前运行。因此,不可能从setup_class
访问fixture值(或fixture修改状态)。其中一个解决方案是完全停止使用
setup_class
,坚持使用fixture-only解决方案,这是pytest现在的首选方法(参见开头的注解)。请注意,
setup
fixture * 依赖于 *fixture_1
,因此可以访问它。