我希望能够在运行py.test时传递命令行参数以进行夹具创建。例如,我想要在下面创建夹具时传递数据库主机名,这样它就不是硬编码的:
import pytest
def pytest_addoption(parser):
parser.addoption("--hostname", action="store", default='127.0.0.1', help="specify IP of test host")
@pytest.fixture(scope='module')
def db(request):
return 'CONNECTED TO [' + request.config.getoption('--hostname') + '] SUCCESSFULLY!'
def test_1(db):
print db
assert 0
很遗憾,默认值未设置,如果从命令行中省略了参数:
$ py.test test_opt.py
=================================================================== test session starts ====================================================================
platform linux2 -- Python 2.7.5 -- pytest-2.3.5
collected 1 items
test_opt.py E
========================================================================== ERRORS ==========================================================================
_________________________________________________________________ ERROR at setup of test_1 _________________________________________________________________
request = <FixtureRequest for <Module 'test_opt.py'>>
@pytest.fixture(scope='module')
def db(request):
> return 'CONNECTED TO [' + request.config.getoption('--hostname') + '] SUCCESSFULLY!'
test_opt.py:8:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_pytest.config.Config object at 0x220c4d0>, name = '--hostname'
def getoption(self, name):
""" return command line option value.
:arg name: name of the option. You may also specify
the literal ``--OPT`` option instead of the "dest" option name.
"""
name = self._opt2dest.get(name, name)
try:
return getattr(self.option, name)
except AttributeError:
> raise ValueError("no option named %r" % (name,))
E ValueError: no option named '--hostname'
我有什么遗漏的吗? ... 另外,在命令行上指定主机名也失败了:
$ py.test --hostname=192.168.0.1 test_opt.py
Usage: py.test [options] [file_or_dir] [file_or_dir] [...]
py.test: error: no such option: --hostname
TIA!
test_1(db)
之外的所有内容都移动到相邻的conftest.py
文件中,然后一切顺利! - Trevor