Bil*_*rat 4 python django satchmo
当我通过键入运行测试用例时
python manage.py test myapp
Run Code Online (Sandbox Code Playgroud)
测试用例完成后,django test runner默认删除了测试数据库.我不希望它被删除.
我可以使用任何数据库!
我想保留我的数据库,因为数据库中存在我想在创建的数据库中看到的错误.这样我就可以找到它们!
Tim*_*ych 12
您可以使用该test --keepdb选项阻止测试数据库被销毁.
https://docs.djangoproject.com/en/1.10/topics/testing/overview/#the-test-database
根据docs,您可以在运行测试后通过以下方式保留数据库:
$ python manage.py test -k
Run Code Online (Sandbox Code Playgroud)
或者
$ python manage.py test --keepdb
Run Code Online (Sandbox Code Playgroud)
小智 8
虽然传递-k到manage.py test将保留测试数据库,但它仍将删除在您的测试用例中创建的记录。这是因为 Django 的TestCase类仍然会在每个测试用例之后重置您的数据库(django.test.TransactionTestCase将执行 a flush,而django.test.TestCase将每个测试用例包装在一个事务中并在测试用例完成时执行回滚)。
使 Django 保留测试数据的唯一真正解决方案是扩展TestCase类并覆盖重置数据库的代码。
但是,如果您没有时间这样做,您还可以让您的测试用例在完成之前暂停执行,让您有时间在数据库重置之前检查它。有几种方法可以实现这一点,但是,现在,这是一个黑客,input在您的 Python 代码中询问用户将使 Python 暂停执行并等待用户输入。
from django.test import TestCase
class MyTestCase(TestCase):
def test_something_does_something(self):
result = do_something_with_the_database()
self.assertTrue(result)
# Ask for `input` so execution will pause and wait for input.
input(
'Execution is paused and you can now inspect the database.\n'
'Press return/enter key to continue:')
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用pdb'sset_trace函数,它也会使执行暂停并等待输入,同时让您在代码执行的那个点调试环境。
只需确保在将代码发送到自动构建系统之前删除input()(or pdb.set_trace()) 调用,否则它将等待用户输入并超时。
在测试执行后保留整个数据库状态(不仅仅是表结构)
django.test.SimpleTestCase(不是 TestCase 或 TransactionTestCase) def tearDown(self) -> None:
pass
@classmethod
def tearDownClass(cls):
pass
Run Code Online (Sandbox Code Playgroud)
--keepdb,例如./manage.py test app.test --keepdb- 防止测试执行后整个数据库清理test_在您的默认数据库名称中添加前缀]测试test_copy命令示例
./manage.py 测试 --noinput --keepdb api.tests.SomeTests.test_copy
class SomeTests(SimpleTestCase):
allow_database_queries = True
def setUp(self):
super(SomeTests, self).setUp()
self.huge_set_up_operations()
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.huge_init_database()
def tearDown(self):
pass
@classmethod
def tearDownClass(cls):
pass
def test_copy(self):
SubscriptionFactory()
Run Code Online (Sandbox Code Playgroud)