为什么测试功能看不到我的 py.test 灯具?
Why can't test function see my py.test fixtures?
我有以下结构:
demo/
conftest.py
test_1.py
test_2.py
conftest.py
内容为:
import pytest
@pytest.fixture()
def my_fixture():
print "testing"*
和test_1.py
内容为:
def test_my_fixture(my_fixture):
my_fixture
和test_2.py
内容为:
import pytest
@pytest.mark.usefixtures('my_fixture')
def test_my_fixture():
my_fixture
当使用 py.test -s
执行测试时,我在 test_2.py
中得到 NameError
而不是 test_1.py
中的夹具;为什么?
这是输出:
================ test session starts ================
platform linux2 -- Python 2.7.3 -- py-1.4.26 -- pytest-2.6.4
plugins: timeout, random
collected 2 items
test_1.py testing
.
test_2.py testing
F
===================== FAILURES ======================
__________________ test_my_fixture __________________
def test_my_fixture():
> my_fixture
E NameError: global name 'my_fixture' is not defined
test_2.py:7: NameError
当你不需要直接访问fixture对象时使用pytest.mark.usefixtures
标记(fixture函数的return值)。
如果您需要访问 fixture 对象,请使用 fixture-as-function-argument(代码中的第一种方式)。
第二个代码错误的原因:my_fixture
在函数(不是局部变量)或模块(不是全局变量)中没有定义,也不是内置对象;但是代码正在尝试访问它; NameError
.
不要尝试访问 my_fixture
。 fixture 对象将是 None
因为 my_fixture
函数 return 什么都没有。
我有以下结构:
demo/
conftest.py
test_1.py
test_2.py
conftest.py
内容为:
import pytest
@pytest.fixture()
def my_fixture():
print "testing"*
和test_1.py
内容为:
def test_my_fixture(my_fixture):
my_fixture
和test_2.py
内容为:
import pytest
@pytest.mark.usefixtures('my_fixture')
def test_my_fixture():
my_fixture
当使用 py.test -s
执行测试时,我在 test_2.py
中得到 NameError
而不是 test_1.py
中的夹具;为什么?
这是输出:
================ test session starts ================
platform linux2 -- Python 2.7.3 -- py-1.4.26 -- pytest-2.6.4
plugins: timeout, random
collected 2 items
test_1.py testing
.
test_2.py testing
F
===================== FAILURES ======================
__________________ test_my_fixture __________________
def test_my_fixture():
> my_fixture
E NameError: global name 'my_fixture' is not defined
test_2.py:7: NameError
当你不需要直接访问fixture对象时使用pytest.mark.usefixtures
标记(fixture函数的return值)。
如果您需要访问 fixture 对象,请使用 fixture-as-function-argument(代码中的第一种方式)。
第二个代码错误的原因:my_fixture
在函数(不是局部变量)或模块(不是全局变量)中没有定义,也不是内置对象;但是代码正在尝试访问它; NameError
.
不要尝试访问 my_fixture
。 fixture 对象将是 None
因为 my_fixture
函数 return 什么都没有。