我正在使用 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(使用前将#替换为@)