Die Pytest-Vorrichtung ist ein sehr nützliches Werkzeug, wenn Sie den Test unter den gleichen Bedingungen wiederholen möchten. Als ich Fixture als Testparameter verwenden wollte, um einen Test zu schreiben, der verschiedenen Bedingungen gemeinsam ist, wurden die Informationen unerwartet nicht im Netz gesammelt, daher werde ich sie hier beschreiben.
Informationen zur Verwendung von Fixture als Testparameter finden Sie übrigens unter Offizielle Seite und GitHub. / pytest-dev / pytest / issue / 349), daher besteht die Möglichkeit, dass in naher Zukunft eine etwas einfachere Methode bereitgestellt wird.
import pytest
@pytest.fixture
def fixture_a():
yield 1
@pytest.fixture
def fixture_b():
yield 2
@pytest.fixture
def fixture_c():
yield 3
@pytest.mark.parametrize("expected, generated", [
(1, fixture_a),
(2, fixture_b),
(5, fixture_c),
])
def test_fail(expected, generated):
assert expected == generated
Dies funktioniert jedoch nicht.
Stellen Sie die Leuchten mit dem Dekorateur pytest.fixture
zusammen.
test.py
#Andere Funktionen sind die gleichen wie oben
@pytest.fixture(params=['a', 'b', 'c'])
def context(request):
if request.param == 'a':
return (1, request.getfixturevalue('fixture_a'))
elif request.param == 'b':
return (2, request.getfixturevalue('fixture_b'))
elif request.param == 'c':
return (4, request.getfixturevalue('fixture_c'))
def test_fixture_parameterize(context):
expected, generated = context
assert expected == generated
$ pytest test.py
========================================= test session starts =========================================
platform linux2 -- Python 2.7.12, pytest-3.1.0, py-1.4.33, pluggy-0.4.0
rootdir: /home/koreyou/work/pytest_fixture_parameterize, inifile:
collected 3 items
test.py ..F
============================================== FAILURES ===============================================
____________________________________ test_fixture_parameterize[c] _____________________________________
context = (4, 3)
def test_fixture_parameterize(context):
expected, generated = context
> assert expected == generated
E assert 4 == 3
test.py:31: AssertionError
================================= 1 failed, 2 passed in 0.02 seconds ==================================
Es schlägt wie erwartet fehl.
Recommended Posts