我正在调用python中的测试文件,其中包含以下内容:
py.test mytest.py
我检查了文档,并按照示例将读取传递的参数的夹具添加到conftest文件中:
import pytest
def pytest_addoption(parser):
parser.addoption("--myoption", action="store", default="",
help="Specify the option string")
@pytest.fixture
def myoption(request):
return request.config.getoption("--myoption")
在我的单元测试类中,我确实添加了装饰器来调用fixture:
import pytest
@pytest.mark.usefixtures("myoption")
class VariousTests(unittest.TestCase):
def test_runsomething(self):
print(myoption)
虽然我无法以任何方式获得我选择的价值;我在这做错了什么?我想要的只是将一个字符串传递给pytest,因此它可以在我的单元测试类中填充一个类变量。
答案 0 :(得分:0)
如果使用pytest.mark.usefixtures
标记,则无法访问夹具对象,但只有夹具功能的副作用。
如果要在测试方法中使用fixture对象访问,请使用显式指定fixture作为参数:
import pytest
def test_runsomething(myoption): # <--- myoption specified as parameter
print(myoption)
➜ t cat t.py
import pytest
def test_runsomething(myoption):
print(myoption)
➜ t py.test -s --myoption myoption-value t.py
==========================================
platform darwin -- Python 2.7.13, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /private/tmp/t, inifile:
collected 1 items
t.py myoption-value
.
============ 1 passed in 0.00 seconds ============
如果你想使用基于unittest.TestCase的测试,你需要修改conftest.py
,以便将fixture注入到类中:
conftest.py
import pytest
def pytest_addoption(parser):
parser.addoption("--myoption", action="store", default="",
help="Specify the option string")
@pytest.fixture
def myoption(request):
request.cls.myoption = request.config.getoption("--myoption")
# ^-- set `myoption` attribute
并在测试方法中将其作为self.myoption
或VariousTests.myoption
:
import unittest
import pytest
@pytest.mark.usefixtures("myoption")
class VariousTests(unittest.TestCase):
def test_runsomething(self):
print(self.myoption) # <----