测试

所有测试都可以通过运行`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"]},
    }
}