如何明确指示 PyTest 在某些测试后删除数据库?
How to explicitly instruct PyTest to drop a database after some tests?
我正在使用 pytest-django 为 Django 应用编写单元测试。我想让我的测试性能更高,这样做要求我将数据保存在数据库中一段时间,而不是仅在一次测试后将其丢弃。例如:
@pytest.mark.django_db
def test_save():
p1 = MyModel.objects.create(description="some description") # this object has the id 1
p1.save()
@pytest.mark.django_db
def test_modify():
p1 = MyModel.objects.get(id=1)
p1.description = "new description"
我想知道如何将两个测试分开,但两者都会使用相同的测试数据库一段时间,然后将其删除。
我认为你需要的是 pytest fixtures。它们允许您创建将在测试期间使用的对象(如果需要则存储在数据库中)。您可以查看可以设置的 pytest fixtures 范围,这样 fixture 就不会从数据库中删除并为每个需要它的测试重新加载,而是为一堆测试创建一次并在之后删除。
您应该阅读 pytest fixtures 的文档 (https://docs.pytest.org/en/6.2.x/fixture.html) and the section dedicated to fixtures' scope (https://docs.pytest.org/en/6.2.x/fixture.html#scope-sharing-fixtures-across-classes-modules-packages-or-session)。
我正在使用 pytest-django 为 Django 应用编写单元测试。我想让我的测试性能更高,这样做要求我将数据保存在数据库中一段时间,而不是仅在一次测试后将其丢弃。例如:
@pytest.mark.django_db
def test_save():
p1 = MyModel.objects.create(description="some description") # this object has the id 1
p1.save()
@pytest.mark.django_db
def test_modify():
p1 = MyModel.objects.get(id=1)
p1.description = "new description"
我想知道如何将两个测试分开,但两者都会使用相同的测试数据库一段时间,然后将其删除。
我认为你需要的是 pytest fixtures。它们允许您创建将在测试期间使用的对象(如果需要则存储在数据库中)。您可以查看可以设置的 pytest fixtures 范围,这样 fixture 就不会从数据库中删除并为每个需要它的测试重新加载,而是为一堆测试创建一次并在之后删除。
您应该阅读 pytest fixtures 的文档 (https://docs.pytest.org/en/6.2.x/fixture.html) and the section dedicated to fixtures' scope (https://docs.pytest.org/en/6.2.x/fixture.html#scope-sharing-fixtures-across-classes-modules-packages-or-session)。