在 pytest 中使用不同的数据库
Posted
技术标签:
【中文标题】在 pytest 中使用不同的数据库【英文标题】:Using different database with pytest 【发布时间】:2013-01-16 17:01:23 【问题描述】:我正在使用 pytest-django 插件为我的 django 应用程序 pytest 运行测试。我使用 mysql 数据库作为 django 的默认数据库。是否有可能仅指定 pytest 使用不同的数据库进行测试,SQLite?
如果有的话,我正在寻找不同的选项,而不是为 py.test --ds=test_settings 创建特殊的 test_seetings.py。
【问题讨论】:
可能是this question的副本? 我认为这些答案是为了通过 manage.py 运行测试。我使用 py.test 命令运行测试。 啊,那它不适用于你的情况。 【参考方案1】:--ds=test_settings
是要走的路!
如果你不想在每次调用 py.test 时都输入--ds=...
,你可以添加一个包含以下内容的 pytest.ini:
[pytest]
DJANGO_SETTINGS_MODULE = test_settings
附带说明:在运行测试时,最好使用与生产环境中使用的相同类型的数据库。 pytest-django 提供了--reuse-db
选项以在测试运行之间重复使用 MySQL/Postgres 数据库,从而在为具有大量模型的项目运行一些测试时节省大量设置时间。
【讨论】:
在生产数据库上运行测试?你的意思是一个数据库代表一个像数据库一样的生产数据库,还是一个在生产中使用的数据库?我希望不是后者。 @OrangeTux 我绝对同意你的观点,这句话具有误导性,而不是我的本意。澄清一下,我的意思是,如果您在生产中使用 PostgreSQL,您应该针对 PostgreSQL 数据库运行您的测试套件。您应该不使用生产数据对实际生产数据库运行测试。有人建议使用 SQLite 进行本地开发以加快测试速度——我认为这是一种反模式。 --reuse-db 是保持快速测试和确保您的系统与您在生产中使用的相同类型的数据库一起工作的方法。 (我似乎无法编辑原始答案,如果有足够声誉的人可以这样做,请随时改写答案)以上是关于在 pytest 中使用不同的数据库的主要内容,如果未能解决你的问题,请参考以下文章
pytest文档68-pytest-lazy-fixture 插件解决 pytest.mark.parametrize 中使用 fixture 问题
使用pytest在REST应用程序中测试权限的最佳方法是什么?
10-pytest-parametrize中使用fixture
python+pytest接口自动化框架-requests发送post请求