问题标签 [pytest-django]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
482 浏览

python - pytest:在测试文件中添加夹具而不是 conftest.py

我是 Python 新手,我对pytest有疑问

test_client.py

conftest.py

是否可以将 conftest.py 中定义的夹具移动test_client.py从而消除conftest.py

0 投票
0 回答
126 浏览

django - Pytest 测试在没有互联网的情况下非常慢,尽管没有测试进行网络调用

我在 Django 项目中遇到了一个奇怪的 pytest 问题。

当我运行一个空单元测试时,

平均需要 7 秒,重用 db 平均需要 3 秒。

关闭wifi,平均需要20秒。

在打开 wifi 并禁用网络的情况下,平均需要 > 150 秒。

对于我的其他团队成员,上述情况没有时间差异。我使用不同的网络监控工具进行了检查,也没有发生网络活动。

0 投票
3 回答
6397 浏览

python - 当 pytest 与 REST 框架交互时,PATCH 和 PUT 无法按预期工作

我正在使用 django REST 框架构建一个 API。

为了测试这个 API,我正在使用 pytest 和测试客户端,如下所示:

或者

在使用 REST 框架的通用 GET、POST 和 DELETE 类时都可以工作(例如DestroyAPIViewRetrieveUpdateAPIView或仅APIView使用 get 和 post 函数)

我遇到问题的地方是使用 PATCH 和 PUT 视图时。比如RetrieveUpdateAPIView。在这里我突然不得不使用:

或者

如果我只是尝试像以前那样使用测试客户端,我会收到错误:

当我在 client.patch() 调用中指定 'application/json' 时:

谁能向我解释这种行为?由于 curl 简单地使用-X PATCH -d"name=123".

0 投票
0 回答
264 浏览

django - 测试数据库迁移的自定义顺序

我正在一个大型应用程序上运行 django 测试。他们需要一个测试数据库,所以我需要在运行测试之前创建一个测试数据库。但问题是 - 由于一些依赖性问题,迁移必须按以下顺序运行:migrate app2, migrate app1, migrate。我知道我做错了,但我没有意愿和时间来修复数百个迁移。

问题是:有没有办法为测试创建数据库,而不是运行它们以便以后通过--keep-db选项使用它?因为应用程序数据库创建需要上述特殊命令顺序,所以我不能只运行“测试”命令来准备数据库并运行测试。

0 投票
3 回答
4665 浏览

python - Pytest 和 Django 设置运行时更改

我有一个接收器需要知道是否DEBUGTrue我的settings.py.

问题是,当我创建用户时,manage.py shell一切都按预期工作。但是,如果我通过 运行我的测试py.test,则值settings.DEBUG将更改为False. 如果我签conftest.pypytest_configureDEBUG则设置为True。它稍后会在某个地方发生变化,我不知道在哪里。

什么会导致这种情况?我确信我不会在代码中的任何地方更改它。

编辑。

conftest.py

myapp/tests/conftest.py

pytest.ini

0 投票
1 回答
2597 浏览

python - pytest-django 数据库初始化似乎没有重新加载数据库

我们将情况归纳为以下几点:

测试夹具 XXX.json 包括一个条形图。第一个测试 (test_t1) 成功。第二个测试 (test_t2) 失败。看来 transaction=True 属性不会导致使用来自测试夹具的数据重新初始化数据库。

如果改为使用来自 unittest 的 TransactionTestCase,则初始化发生在类中的每个测试用例之前,并且所有测试都成功。

对于为什么 pytest 示例没有为第二个测试用例重新初始化数据库的任何观点,我将不胜感激。

0 投票
1 回答
320 浏览

python - Pytest 不会重写 AssertionError

我正在使用带有 pytest-django 和 pytest-cov 插件的 pytest 测试 Django 项目,当我告诉它在目录(pytest project -vv --cov --ds=proj.tests)中查找测试时,它不会在发生 AssertionError 时重写:

但是,它仍然总是在另一个目录 / django app 中工作,它是一个单独的 tests.py 文件,而不是在上述情况下包含 python 文件的目录

另外,我不知道它是否有帮助或只是混淆了一切,但是当直接查找文件 ( pytest project/core/tests/pytest.py -vv --cov --ds=proj.tests) 时,它按预期工作:

它甚至比以前更奇怪,而且我没有触及它的任何配置(对我的同事来说一切都是一样的,据说他的提交时间更长)。

我正在使用 tox 来自动化测试。
这是pytest部分

为什么它不再像它应该的那样工作了?有没有办法解决这个问题?我不想回到使用 print 的日子 :(

我正在使用 Python 3.5.2、tox 2.4.1、pytest-django 3.0.0(及其 pytest dep)和 pytest-cov 2.4.0

0 投票
1 回答
1093 浏览

django - pytest-django 使用迁移运行忽略数据库触发器

我的 Django 应用程序依赖于带有一些触发器设置的数据库。我使用这部分文档在测试数据库中为 pytest 运行器设置触发器。

我运行我的测试,--nomigrations它按预期工作。如果没有--nomigrations(首先测试运行迁移),触发器将不起作用。

所以试图调试这个,我已经确认

  1. 夹具正在运行,因此应该设置触发器
  2. 在我的测试开始时在调试器中暂停执行,我可以确认触发器已创建并存在于测试数据库中(通过运行psql test_<mydb>并查看pg_trigger表)
  3. 在我的夹具中暂停执行,我可以确认迁移是在夹具之前运行的。所以迁移可能会为我设置触发器,他们可能会做错,但夹具会丢弃所有触发器并重新创建它们
  4. 移除夹具并使用迁移运行不会提供新结果。所以没有理由认为夹具是问题所在。这似乎只是由于正在运行的迁移

让我再次强调一下,在没有迁移的情况下运行测试通过并在针对我的开发数据库运行开发服务器时测试功能我还可以确认它可以工作

所以,我的问题是:有什么理由让迁移运行应该做不同的事情吗?或者我的迁移是否有可能做了一些晦涩的事情导致事情失败,即这是我自己的错?

0 投票
0 回答
132 浏览

python - Pytest 对 unittest.installHandler 的支持

我正在考虑将我们的 Django 项目的测试切换为使用 Pytest 和 pytest-django。我遇到的问题是我无法在中间完全停止测试运​​行。

默认的 Django 测试运行器对此有很好的支持

如果在测试运行时按 Ctrl-C,测试运行器将等待当前运行的测试完成,然后正常退出。在正常退出期间,测试运行器将输出任何测试失败的详细信息,报告运行了多少测试以及遇到了多少错误和失败,并照常销毁任何测试数据库。因此,如果您忘记传递 --failfast 选项,请注意某些测试意外失败并希望在不等待完整测试运行完成的情况下获取有关失败的详细信息,则按 Ctrl-C 可能非常有用。

如果您不想等待当前正在运行的测试完成,您可以再次按下 Ctrl-C,测试运行将立即停止,但不会正常停止。不会报告中断前运行的测试的详细信息,并且运行创建的任何测试数据库都不会被破坏。

Pytest 或 pytest-django 对此有什么支持吗?我已经进行了一些挖掘,看起来你必须调用unittest.installHandler(),然后以某种方式告诉 Pytest 停止运行。

使用 Pytest,按Ctrl+C只会立即停止测试,而不会进行任何拆解。调用installHandler()意味着它不会停止运行。

0 投票
0 回答
246 浏览

django - 创建数据库后运行 SQL,但使用 pytest 进行预迁移

我有一个 django 项目,它的一些模型使用特殊索引。
出于这个原因,我在我的数据库预迁移中创建了一个扩展。当我运行测试时,pytest 创建一个测试数据库并运行迁移,但没有创建扩展。我无法在迁移中创建扩展。有没有办法在创建数据库之后但在迁移运行之前在测试数据库上插入“RunSQL”命令?
技术资料:

  • Django 1.9.5
  • pytest
  • postgres 9.5