I would like to pass the py.test command line argument to create the binding. For example, I would like to pass the hostname of the database to create the device below, so it will not be hardcoded:
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
Unfortunately, the default value is not set if the argument is not specified on the command line:
$ 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'
What am I missing? ... By the way, specifying the host name on the command line also fails:
$ py.test
TIA!
source share