Pytest - 访问 class_method 上的 session_scope 固定装置

2024-01-06

我正在使用 celery 固定装置来测试项目上的几个任务,我想知道是否有一种方法可以访问类方法内的会话范围固定装置(默认情况下,芹菜固定装置是会话范围的)引用:

@pytest.mark.usefixture('celery_worker')
class TasksTest(TestCase):

    def test_my_task_a(self):
        tas_info = my_task_a.delay()
        assert celery_worker.something # access the celery_worker reference raises an error

正如中提到的pytest docs https://docs.pytest.org/en/latest/unittest.html:

Note:

unittest.TestCase方法不能直接接收固定参数,因为这可能会影响运行一般的 unittest.TestCase 测试套件的能力。

以上usefixtures and autouse示例应该有助于将 pytest 固定装置混合到单元测试套件中。

您也可以逐渐放弃子类化unittest.TestCase to 简单的断言然后开始逐步受益于完整的 pytest 功能集。

因此,按照这个建议,您可以在类级别定义一个“传递”自动使用固定装置,它接受其他固定装置作为参数,并存储对单个测试中需要的任何内容的引用:

class TasksTest(TestCase):

    @pytest.fixture(autouse=True)
    def my_celery_passthrough(self, celery_worker, celery_session_worker):
        self.worker = celery_worker
        self.session_worker = celery_session_worker

    def test_spam(self):
        assert 'macbookpro2017' in self.worker.hostname
        assert 'macbookpro2017' in self.session_worker.hostname

不过,让我重复一下上面引用的最后一部分:

您也可以逐渐放弃子类化unittest.TestCase to 简单的断言然后开始逐步受益于完整的 pytest 功能集。

既然你已经在使用pytest特点是unittest不会再明白了——为什么还要坚持测试课程?只需从一开始就将新测试编写为函数,这样您就不必引入任何解决方法。至于旧的基于类的测试,您可以暂时保留它们,稍后当/如果您必须修改它们时重写它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytest - 访问 class_method 上的 session_scope 固定装置 的相关文章

随机推荐