gpt4 book ai didi

python - 如何使用生产数据在 Django 中运行测试(只读)?

转载 作者:太空狗 更新时间:2023-10-30 02:52:43 25 4
gpt4 key购买 nike

我想在 Django 中运行测试,但为了运行测试,我需要访问生产数据库中的数据(我不想为测试设置一个全新的数据库)。

如何在我的脚本中不允许写访问的情况下使用生产数据库中的这些数据?我不希望此测试产生任何影响,但我需要访问此数据才能运行此测试。仅仅为了获取几行数据就必须启动(并支付)一个全新的数据库似乎很荒谬,有什么建议吗?

最佳答案

我建议不要这样做。运行测试时,您无法完全控制数据库的状态,测试的通过可能取决于生产数据库的内容。而且不可能在边缘情况发生之前对其进行测试。更不用说,如果您搞砸了某些事情,您将面临用测试数据填充生产数据库或破坏生产数据库中的记录的风险。

Django 使创建测试数据库变得非常简单。使用命令 python manage.py test [app_name] 时,将为您创建一个测试数据库,其设置与您的生产/开发数据库相同。

要获得此功能,Django 测试文档说明:

If your tests rely on database access such as creating or querying models, be sure to create your test classes as subclasses of django.test.TestCase rather than unittest.TestCase.

这里有更多关于 Django 测试数据库的信息:https://docs.djangoproject.com/en/2.1/topics/testing/overview/#the-test-database

关于维护测试数据库的问题,Django 在测试运行之前启动数据库并在测试完成后销毁数据库。测试数据库也在您的本地计算机上创建(假设您在本地计算机上运行它)。所以我认为定价应该不是问题。

编辑:在测试前填充测试数据库:

1. 在测试逻辑开始之前在测试中创建实例。这些将在测试结束时被销毁。示例:

class Tester(TestCase):
def test_works(self):
instance = Model.create(data=data)
# then run your test logic

2. 在测试类的setUp 方法中创建实例。 setUp 中的所有内容都将在类的每个测试方法之前(重新)创建,并在每次测试完成后销毁。示例:

class Tester(TestCase):
def setUp(self):
self.instance = Model.create(data=data)

def test_works(self):
# run test logic with access to self.instance

3. 在测试运行之前使用固定装置进行填充。在您正在测试的任何应用程序的 fixtures 目录中为模型的某些实例定义数据(可能需要创建目录)。您可以在 json 或 yaml 中定义它们,我相信其他格式。然后在你的测试中:

class Tester(TestCase):
def setUp(self):
fixtures = ['/myapp/fixtures/dump.json']

def test_works(self):
# test logic and you can access all the instances created from the data in dump.json

关于固定装置的更多信息:https://django-testing-docs.readthedocs.io/en/latest/fixtures.html

如果您希望测试数据库具有与生产数据库相似的数据,您可以从生产数据库中提取数据并将其保存在夹具中。

关于python - 如何使用生产数据在 Django 中运行测试(只读)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52230750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com