问题标签 [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 回答
285 浏览

python - 只有自定义名称的动态 pytest 方法生成

嗨,我正在尝试 pytest 文档中提到的以下示例,

当我使用 py.test -v 运行时,它会给出如下输出,

在这里,当我生成 html 报告时,当我使用很长的输入数据时,名称太长了。

在上面的例子中,为了避免第一个结果,方法的名称是 [3+5-8]。即它采用元组(3 + 5,8)并将其附加到实际的测试用例方法名称。

现在在我的情况下,元组是 ("short name", "very long string") 而不是 (3+5,8) 所以在我的 html 报告中显示很长。是否可以仅显示“短名称”而不显示第二个值?

0 投票
3 回答
1338 浏览

django - 模型实例夹具未保存在数据库中

我有一个包含两种方法的测试类,并希望在两种方法之间共享一个保存的模型实例。

我的装置:

我的期望是只接收model(两种)我的测试方法上的固定装置,并让它保持不变,并保留在数据库中:

我已经--pdb在 结束时使用它进行了验证test1,运行Model.objects.all()返回我创建的单个实例。同时, psql 显示没有记录:

Model.objects.all()在末尾运行in pdb 会test2返回一个空列表,考虑到该表为空,这可能是正确的。

  1. 为什么我的模型没有被持久化,而查询仍然返回一个实例?
  2. model如果我的夹具被标记scope='class'并保存,为什么在第二个测试中查询没有返回实例?(这是我最初的问题,直到我发现保存模型对数据库没有任何作用)

使用django 1.6.1, pytest-django 2.9.1,pytest 2.8.5

谢谢

0 投票
2 回答
751 浏览

python - pytest 有序插件不适用于多个文件的组合

嗨,我正在使用“ http://pytest-ordering.readthedocs.org/en/develop/ ”,当我使用如下装饰器时,订单工作正常,

现在说我有两个文件 test_example1.py 和第二个文件 test_example2.py

在这种情况下,如果我使用此排序,则首先执行来自 file1 和 file2 的 order=1,然后开始在两个文件中执行 order=2

有没有办法指定只在当前正在执行的文件中说订单检查?

0 投票
2 回答
1201 浏览

python - 使用 LocMemCache 进行选择性 Django pytest

我有一个基于 Django REST 框架的SimpleRateThrottle的自定义 Throttling 类,我想用 pytest 测试我的自定义类。由于我的默认测试设置使用 DummyCache,我想为这个特定的测试模块切换到 LocMemCache(SimpleRateThrottle 使用缓存后端来跟踪计数)。有没有办法为选择性测试切换缓存后端?在夹具中设置 settings.CACHE 似乎不起作用。我还尝试在 SimpleRateThrottle 中模拟 default_cache,但我做错了。

naive_throttler.py

rest_framework/throttling.py

0 投票
1 回答
4323 浏览

django - 如何覆盖 Django 测试中的数据库设置?

我在 Django 1.8(使用 pytest)上,我有以下配置:

  • Adefaultreadonly由 a 管理的数据库MasterSlaveRouter,根据它们是读取还是写入操作,将 DB 调用定向到一个连接或另一个连接。
  • 在我的开发环境中,settings.DATABASES字典中的两个条目具有相同的设置(它们只是使用不同的连接,但数据库是相同的)。
  • 然而,在我的测试环境中,只有一个default数据库。
  • 每当保存模型时,我post_save都会触发一个信号Foo
  • 我有一个原子操作(用 装饰@transaction.atomic),它修改一个Foo实例并调用.save()它两次。由于没有将自定义using参数传递给装饰器,因此事务仅在default数据库上处于活动状态。

post_save回调创建一个指向的Bar记录,但仅在检查是否存在带有此的记录之后(为了避免)。通过执行以下查询来完成此检查:OneToOneFieldFooBarfoo_idIntegrityError

这在第一次post_save调用回调时是可以的。创建了一条Bar记录,一切正常。然而,第二次,即使Bar在上一次保存中刚刚创建了这样一个实例Foo,由于过滤是一个读取操作,它是使用readonly连接执行的,因此already_exists最终包含该值False并触发了新记录的创建,最终会抛出一个 IntegrityError ,因为在default连接上执行创建操作时,已经有一条带有 that 的记录foo_id

我尝试将DATABASES字典从 dev_settings 复制到 test_settings,但这破坏了许多测试。然后我阅读了有关override_settings装饰器的信息,并认为它非常适合我的情况。然而,令我惊讶的是,它没有奏效。似乎在某些时候,当应用程序启动时,DATABASES字典(只有default来自 test_settings 的字典)被缓存,然后即使我改变setting.DATABASES了,新值也不再被访问。

如何正确覆盖一项特定测试的数据库配置?

0 投票
2 回答
11878 浏览

python - 如何使用 pytest 测试 Django 模型?

我开始使用 pytest。我已经配置了 pytest,无论如何我找不到使用 pytest 进行 Django 特定测试的资源。如何使用 测试模型pytest_django

我已经问过一个关于单元测试的问题,

如何有效地测试这个 Django 模型?

我想知道如何用 py.test 编写相同的测试?

在模型下方添加和用 unittest 编写的测试。

被测模型是,

unittest书面的,

感谢您的任何意见。

0 投票
0 回答
214 浏览

django - 在我的本地机器上从 vagrant 运行 webdriver

我在 Windows 机器上运行 vagrant,使用“ubuntu/trusty64”框。我在 vagrant 上运行 selenium 测试(使用 pytest-selenium 和 django)如何设置 webdriver 与我的本地机器(windows)firefox/chrome 一起工作?

是否可以从 vagrant machine 触发我的本地浏览器?我需要 X-server 吗?

0 投票
3 回答
3693 浏览

django - pytest-cov 一次涵盖许多应用程序

我用许多应用程序构建了 django 项目。现在我想为这些应用程序生成一个覆盖率报告。出于测试目的,我使用 py.test、pytest-django 和 pytest-cov。到目前为止,我只能通过在命令行上手动输入所有应用程序名称来生成报告:

pytest-cov 有没有办法用一个简单的表达式来指定所有的应用程序?

0 投票
1 回答
2011 浏览

python - pytest异常无类型对象不可调用

test1.py我有下面的代码

conftest.py我有

当我运行它时,它会启动并关闭浏览器。

但我也得到错误self = <CallInfo when='teardown' exception: 'NoneType' object is not callable>, func = <function <lambda> at 0x104580488>, when = 'teardown'

此外,如果我想运行两个测试test_1test_2使用相同的驱动程序对象,我需要使用范围modulesession

0 投票
0 回答
277 浏览

python - pytest 范围函数未创建 2 个浏览器实例

我正在尝试并行运行 2 个测试,xdist因此在此之前我尝试使每个测试独立。

这是我设置浏览器的地方。

这是我正在运行的 2 个测试

但是当我运行测试时,我得到

如您所见,它使用相同的浏览器实例。我想如果我设置scopefunction会创建 2 个浏览器实例?

如果上述工作最终目标是并行运行测试,例如使用py.test -d --tx 3*popen//python=python2.7 test.py -s?因此它将同时启动 2 个浏览器。