TypeError: TestViews.test_fails() отсутствует 1 обязательный позиционный аргумент: 'param'
Я пытаюсь запустить тесты на приложении Django с помощью selenium + pytest, которые, согласно docs, должны работать.
import pytest
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium.webdriver import Chrome
class TestViews(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.driver = Chrome()
@classmethod
def tearDownClass(cls):
if hasattr(cls, 'driver'):
cls.driver.quit()
super().tearDownClass()
@pytest.mark.parametrize('param', ['param1', 'param2'])
def test_fails(self, param):
pass
Однако, я получаю:
Creating test database for alias 'default'...
Found 1 test(s).
System check identified no issues (0 silenced).
Error
TypeError: TestViews.test_fails() missing 1 required positional argument: 'param'
Destroying test database for alias 'default'...
StaticLiveServerTestCase
наследует unittest.TestCase
, что означает, что вы не можете использовать @pytest.mark.parametrize
для расширения вашего теста. К счастью, вы можете использовать parameterized
вместо этого.
См. Работает ли параметризованный тест pytest с тестами unittest на основе классов? для связанного вопроса.
И смотрите https://stackoverflow.com/a/52062473/7058266 для обходного пути.
Вот как будет выглядеть ваш код после замены @pytest.mark.parametrize
на parameterized
:
from parameterized import parameterized
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium.webdriver import Chrome
class TestViews(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.driver = Chrome()
@classmethod
def tearDownClass(cls):
if hasattr(cls, 'driver'):
cls.driver.quit()
super().tearDownClass()
@parameterized.expand([
['param1'],
['param2'],
])
def test_fails(self, param):
pass