Ich würde gerne ein Kommandozeilenargument zu py.test für Fixtures erstellen. Zum Beispiel würde Ich mag eine Datenbank Hostnamen in die Halterung Schaffung unten passieren, damit es nicht hart codiert werden:Angabe Fixture-Argument für py.test von der Befehlszeile
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
Leider ist die Standardeinstellung nicht festgelegt, wenn das Argument von dem weggelassen Befehlszeile:
$ 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'
Was vermisse ich? ... Übrigens, die Angabe des Hostnamens in der Befehlszeile schlägt ebenfalls fehl:
$ 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!
Ja, ich versuche alles auf Datei zu bringen. Ich werde versuchen, es aufzubrechen, um zu sehen, was passiert. ... Ich wusste nicht, dass conftest.py eine separate Datei sein musste. ... Vielen Dank! – Trevor
Das war das Problem! Ich habe alles außer der eigentlichen Testfunktion 'test_1 (db)' in eine angrenzende Datei 'conftest.py' verschoben, und es funktionierte großartig! – Trevor