L'appareil pytest est un outil très utile lorsque vous souhaitez répéter le test dans les mêmes conditions. Lorsque je voulais utiliser fixture comme paramètre de test afin d'écrire un test commun à diverses conditions, les informations n'étaient pas rassemblées de manière inattendue sur le net, je vais donc les décrire ici.
Au fait, pour savoir comment utiliser fixture comme paramètre de test, voir Official Page et GitHub. / pytest-dev / pytest / issues / 349), il est donc possible qu'une méthode un peu plus simple soit fournie dans un proche avenir.
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
Cependant, cela ne fonctionne pas.
Assemblez les luminaires en utilisant le décorateur pytest.fixture
.
test.py
#Les autres fonctions sont les mêmes que ci-dessus
@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 ==================================
Il échoue comme prévu.
Recommended Posts