【发布时间】:2017-05-23 12:01:13
【问题描述】:
我正在将 pytest 与 Django 一起使用(通过 pytest-django),我想知道是否有可能有一个范围为 class 的夹具,它在数据库中创建一些模型,然后 不是在每次测试结束时删除这些模型。
例如;
@pytest.fixture(scope='class')
def expensive():
return MyModel.objects.create()
@pytest.mark.django_db()
class TestMyModel:
def test_a(self, expensive):
MyModel.objects.get() # All good
def test_b(self, expensive):
MyModel.objects.get() # raises MyModel.DoesNotExist
这只是一个简化的示例,在我的实际代码中,夹具 expensive 实际上正在做一些需要一些时间的事情(我实际上正在使用参数化测试,但我想这不会有任何区别)。我的愿望是在夹具expensive 中创建的数据一旦超出类的范围就会回滚,以免干扰其他测试。
使用夹具django_db_blocker 似乎可以实现我想要做的事情,但是我无法让它按我想要的方式运行。
【问题讨论】:
-
你想在每次测试后回滚更改还是在整个测试周期中保留它,问题的标题说 not rollback 但测试描述说 > 我的愿望是在fixture中创建的数据一旦超出类的范围就会回滚,以免干扰其他测试
-
我想保留
expensive中发生的所有事务,同时回滚任一测试中发生的事务。
标签: python django pytest pytest-django