[英]TypeError: TestViews.test_fails() missing 1 required positional argument: 'param'
我正在尝试使用 selenium + pytest 在 Django 应用程序上运行测试,根据文档,下面应该可以。
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 参数化测试是否适用于基于单元测试类的测试? 对于相关问题。
有关解决方法,请参阅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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.