测试¶
所有测试都可以通过运行`tox <https://tox.wiki/en/latest/>`_命令来执行。默认情况下,测试会针对本地sqlite2实例运行。`pyenv <https://github.com/pyenv/pyenv>`_可用于管理多个python安装。
MySql / Postgres 测试¶
通过使用Docker,您还可以针对MySQL db和/或Postgres运行测试。
IMPORT_EXPORT_TEST_TYPE 必须根据您希望运行的测试类型进行设置。设置为 'postgres' 以运行 postgres 测试,设置为 'mysql-innodb' 以运行 mysql 测试。如果此环境变量为空(或为任何其他值),则将使用默认的 sqlite2 数据库。
此过程在 runtests.sh 中编写脚本。假设您的系统已安装 docker,运行 runtests.sh 将针对 sqlite2、mysql 和 postgres 运行 tox。您可以按需编辑此脚本以自定义测试。
请注意,这是由CI构建执行的过程。
覆盖范围¶
默认情况下,覆盖率数据以并行模式写入(在``pyproject.toml``中定义)。
可以通过以下方式获取简单的覆盖率报告:
make coverage
然而这可能遗漏特定于db的行。完整的覆盖率报告可以通过运行tox获得。
在tox运行后,您可以按如下方式查看覆盖率数据:
# combine all coverage data generated by tox into one file
coverage combine
# produce an HTML coverage report
coverage html
检查上述命令的输出以定位覆盖率HTML文件。
批量测试¶
有一个辅助脚本可用于生成和分析批量加载。参见 scripts/bulk_import.py。
你可以通过配置如上定义的环境变量来使用此脚本,然后安装并运行测试应用程序。为了运行辅助脚本,你需要安装 make install-test-requirements,然后将 django-extensions 添加到 settings.py 中(INSTALLED_APPS)。
然后您可以按如下方式运行脚本:
# run creates, updates, and deletes
./manage.py runscript bulk_import
# pass 'create', 'update' or 'delete' to run the single test
./manage.py runscript bulk_import --script-args create
启用日志记录¶
您可以通过更新 settings.py 中的 LOGGING 块来查看控制台 SQL 调试日志:
LOGGING = {
"version": 1,
"handlers": {"console": {"class": "logging.StreamHandler"}},
"root": {
"handlers": ["console"],
},
"loggers": {
"django.db.backends": {"level": "DEBUG", "handlers": ["console"]},
}
}