我建议不要这样做。运行测试时,您将无法完全控制数据库的状态,并且测试的通过可能取决于生产数据库的内容。并且不可能在边缘情况发生之前对其进行测试。更不用说如果你搞砸了,你会冒着用测试数据填充生产数据库或破坏生产数据库中的记录的风险。
Django 使创建测试数据库变得非常简单。使用命令python manage.py test [app_name] 时,将为您创建一个测试数据库,其设置与您的生产/开发数据库相同。
要获得此功能,Django 测试文档说明:
如果您的测试依赖于数据库访问,例如创建或查询模型,请务必将您的测试类创建为 django.test.TestCase 的子类,而不是 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
如果您希望您的测试数据库具有与生产数据库相似的数据,您可以从生产数据库中提取数据并将其保存在夹具中。