我有一个下面的py.test程序,我需要2个灯具,一个带范围"会话"和其他范围" class",具有范围的夹具" class"使用" session"作为其中一个论点。
在运行使用范围为" class"的测试时,测试似乎运行了两次,
以下是代码。
import pytest
@pytest.fixture(scope="session")
def session_fixture(request):
data = ['hello world']
return data
@pytest.fixture(scope="class")
def class_fixture(session_fixture, request):
if hasattr(request.cls, 'test1'):
request.cls().test1(session_fixture)
return session_fixture
class TestClass:
def test1(self,class_fixture):
print("Hello World")
当我进行测试时,它似乎打印了#34; hello world"两次。
输出继电器:
$ py.test test7.py -s
=============== test session start============================
platform linux2 -- Python 2.7.5 -- py-1.4.27 -- pytest-2.7.0
rootdir: /root/fix2, inifile:
plugins: multihost
collected 1 items
test7.py Hello World
Hello World
.
================ 1 passed in 0.09 seconds ===================
在上面的程序中,如果我使用灯具" session_fixture"直接而不是" class_fixture",我看到" Hello world"只打印一次。
有关如何解决问题的任何提示。
答案 0 :(得分:2)
您的'测试'案例似乎不正确
import pytest
@pytest.fixture(scope="session")
def session_fixture(request):
data = ['hello world']
print("Session fixture")
return data
@pytest.fixture(scope="class")
def class_fixture(session_fixture, request):
print("Class fixture")
return session_fixture
class TestClass:
def test1(self,class_fixture):
print("Hello World 1")
def test2(self, class_fixture):
print('Hello World 2')
这给出了:
py.test test.py -s
collected 2 items
test.py::TestClass::test1 Session fixture
Class fixture
Hello World 1
PASSED
test.py::TestClass::test2 Hello World 2
PASSED
所以基于类的夹具只执行一次。 Pytest对像这样的简单案例进行了大量的测试覆盖,以确保它始终按照声明的方式工作。