Pytest fikstürünü parametrize olarak geçmek
Dec 14 2020
@ Pytest.mark.parametrize içindeki conftest.py'de tanımlanan fikstürümü ileterek aşağıdaki hatayı alıyorum:
pytest --alist="0220,0221" test_1.py -v -s
NameError: name 'alist' is not defined
conftest.py:
def pytest_addoption(parser):
parser.addoption("--alist", action="store")
@pytest.fixture
def alist(request):
return request.config.getoption("--alist").split(",")
test_1.py:
@pytest.mark.parametrize("channel", alist, scope="class")
class TestRaIntegrationReplay:
def test_ra_start_time(self, channel):
print(channel)
Bir fikstür olarak teste geçersem:
def test_ra_start_time(self, alist):
for channel in alist:
print(channel)
İyi çalışıyor, ancak @ pytest.mark.parametrize'ye geçerken çalışmıyor
Yanıtlar
1 MrBeanBremen Dec 15 2020 at 00:01
Yorumda belirtildiği gibi mark.parametrize
, dekoratör yükleme zamanında değerlendirildiği için bir fikstürü bir dekoratöre doğrudan iletemezsiniz.
Parametrelendirmeyi bunun yerine çalışma zamanında yapabilirsiniz pytest_generate_tests
:
import pytest
@pytest.hookimpl
def pytest_generate_tests(metafunc):
if "alist" in metafunc.fixturenames:
values = metafunc.config.option.alist
if value is not None:
metafunc.parametrize("alist", value.split(","))
def test_ra_start_time(alist):
for channel in alist:
print(channel)
def test_something_else():
# will not be parametrized
pass
Parametreleme, alist
parametrenin test fonksiyonundaki varlığına göre yapılır . Parametrelemenin çalışması için bu parametre gereklidir (aksi takdirde, eksik argüman nedeniyle bir hata alırsınız).
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı