繁体   English   中英

类型错误:TestViews.test_fails() 缺少 1 个必需的位置参数:'param'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM