回答
您可以使用IPDB:
pip install ipdb
然后在测试功能放在一个破发点:
import ipdb; ipdb.set_trace()
运行测试时,你可以访问所有你会有一个交互的shell值与您在代码中使用的方式相同Model.object.....
只使用'./manage.py shell'有什么区别? – Risadinha
当您使用“manage.py test”测试您的代码时Django创建测试数据库并在测试结束时将其销毁=>您无法使用shell访问它。 – user2021091
如果您需要测试中的数据,则应为其创建fixtures。最好的方法是使用./manage.py dumpdata --help
。
将输出存储在项目树中以便能够从测试中加载它。您可以使用像FIXTURES_DIR
这样的设置,但这不是必需的。您还可以将夹具文件存储在他们所属的测试附近。
我的经历让我创建了几个只包含某些模型的小夹具文件。例如,我有一个小夹具文件,其中只包含我在测试中需要的一些用户。该夹具在需要认证的任何地方加载。当然,包含与用户对象相关数据的所有其他灯具都需要更改为这些测试用户,或者需要将相关用户添加到灯具。您将不得不尝试四处修复您的夹具数据,以使其完成测试。您很可能不希望将所有生产数据都作为测试装置。
在你测试你指定这样的灯具:
from django.test import TestCase
class SomeTest(TestCase):
USER_DICT = {
'username': 'django-test',
'password': 'XXX'
}
fixtures = [
# fixture for django-test and other users
os.path.join(settings.FIXTURE_DIR, 'auth_fixture.json'),
# core models for some app
os.path.join(settings.FIXTURE_DIR, 'core.json'),
]
def test_one(self):
# uses clean fixtures
# modify, delete or add data
pass
def test_two(self):
# uses clean fixtures
# the changes of test_one have been reset
pass
这会自动加载灯具为每个测试。您可以在一次测试(单一测试方法)期间修改,删除和添加数据,并且所有数据都将重置为下一次测试的原始数据(下一个方法)。
是的!
这是一个好主意吗?希望有更简单和更安全的方法来实现你的目标。
默认情况下,django测试运行器creates a database前加test_
,部分是为了防止您的数据库意外执行破坏性测试!
因为django的模型与测试运行器集成测试紧密集成(编写与数据库实际交互的测试非常快)。这主要是因为每个测试都是在一个事务中执行的,并且在测试拆卸期间,事务被回滚。由于测试速度如此之快,因此惯例是根据需要在每个测试中创建测试数据(固件),而不是依赖全局数据库状态。这也会让您的测试更加孤立和专注。
当然,在很多情况下,您可能想测试生产。要做到这一点,您可以使用常规测试运行器(unittest.TestCase
,因此不会出现测试数据库),然后直接导入模型并查询数据库。
但是,如果您的意图是“我想检查我的测试中有多少行在我的已填充表中,因为我解析了一个csv来填充数据库”。那么为什么你不能创建一个Django的单元测试,在那里你有一个虚假的CSV,执行代码解析/加载它,然后在你的测试用例的上下文中查询你的数据库?它在django测试用例的上下文中提供了很多保护和速度。
如果您最终创建了某种直接查询数据库的功能/自动化测试,那么创建READ ONLY数据库用户可能是一个好主意。
- 1. Django模型访问
- 2. 内部测试模型 - Django 1.7问题
- 3. 测试Django时访问request.user对象
- 4. 从验收测试访问模型
- 5. Django模型关系测试
- 6. Django模型单元测试
- 7. django模型单元测试
- 8. Django:测试抽象模型
- 9. Django测试模型属性
- 10. 从Django测试中访问Django testserver
- 11. 访问Django的模型
- 12. Django:访问模型属性
- 13. Cron Job访问django模型
- 14. 访问的Django模型
- 15. 在django测试客户端访问raw_post_data
- 16. 在Django中测试特定模型
- 17. 测试在Django模型“类元”
- 18. 访问模型场admin.ModelAdmin在Django
- 19. 在Django中访问模型变量
- 20. 在Django中访问相关模型?
- 21. 访问模型字段属性在Django
- 22. 在Django 1.9中访问模型缓存
- 23. 如何在使用Django测试URL时模拟数据库访问
- 24. django访问本地测试网址
- 25. 在CakePHP控制器测试中访问模型
- 26. 在验收测试中访问后获取路由模型
- 27. Django模型:父模型访问子模型场
- 28. 使用FileField测试Django模型
- 29. 测试的Django模型清洁方法
- 30. Django - 测试模型字段更改
您是指当前模型的值?你为什么想这样做? –
您可以从应用程序对象中获取模型。 –
我该怎么做?我如何启动应用程序对象?我想检查一下我的测试中有多少行在我的已填充表中,因为我解析了一个csv来填充数据库。这就是为什么我访问 – ddomingo