问题标签 [django-nose]

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 回答
404 浏览

django - Django - 使用不同的夹具多次运行测试

有没有办法使用 django-nose (或任何其他库)使用不同的夹具多次运行测试?我想检查我的项目如何使用不同数量的数据运行。当我搜索时,我发现没有办法将固定装置作为参数传递给 manage.py 测试。

此致

0 投票
1 回答
558 浏览

django - 'module' 对象没有属性 'commit_unless_managed'

我正在使用 django 1.8 和 django-nose 1.4,而我运行

它显示错误消息

有什么解决办法?

0 投票
1 回答
294 浏览

python - 鼻子测试用例无法设置“事务管理块以挂起的 COMMIT/ROLLBACK 结束”

我们有一个包含大约 10,000 个 Django+Nose 单元测试的大型 Django 项目。我们很少在代码库中使用事务。可能我们 99% 的代码库不使用事务。该项目在 Django 1.5.8 和 Django Nose 1.4.1 上。(是的,我知道这已经很老了。我们目前正在进行一个更新到 Django 1.6 的项目 18 个月,但它还没有完成。所以,如果我的问题的解决方案是“升级 Django”,我我需要一种方法来修补它,因为这个问题现在正在发生,而且我们还需要几个月的时间才能完成 Django 的升级。)

我们今天遇到了一个以前从未见过的新错误。我们添加了一个新的数据库(和必要DATABASES['geo']的设置),其中包含一个应用程序不会更新的大型静态数据集。它是一个只读数据库,恰好存在于 MySQL 中。与我们所有其他数据库一样,Django Nose 在每次测试运行的开始(结束)时开始创建新数据库的测试副本(并破坏所述测试数据库)。这导致了许多问题,包括磁盘空间问题和浪费时间的问题,但测试确实运行并通过了。

为了解决这个问题,我们添加'TEST_MIRROR': 'geo'DATABASES['geo']设置。这就是这个头痛开始的地方。只是这种变化导致我们测试用例的一小部分随机部分在每次测试运行中失败:

每个测试用例的错误和堆栈跟踪都是相同的:

而且,更糟糕的是,少数失败的测试用例每次都不同。这是我第二次运行它时的失败:

等等。

正如您从堆栈跟踪中看到的那样,执行甚至没有进入我们的源代码。在我们的测试用例开始执行之前,它在 Django Nose 源代码中失败了。而且,这只是我们测试的一小部分。其他 9,600 多个单元测试都以优异的成绩通过。

我不知道该怎么办。我不是故意创建任何事务,添加'TEST_MIRROR': 'geo'DATABASES['geo']配置中会导致这个问题对我来说没有意义,但确实如此。

我怎样才能解决这个问题?

0 投票
1 回答
1226 浏览

django - 一起使用 django-nose 和 unittest-xml-reporting - 单元测试

我们有一个 django 项目,它使用unittest-xml-reporting向竹子提供有关测试结果的 xml 文件。我们想集成django-nose来测试代码覆盖率。但是由于 django 测试需要一个TEST_RUNNER类,我看不到如何并行使用这两个功能(实际上不重叠):

用于 unittest-xml-reporting

对于 django-nose

我试图进入代码,但编写某种黑客将类连接在一起似乎很乱。还有什么其他选择?

0 投票
4 回答
20136 浏览

python - Django 单元测试需要很长时间才能创建测试数据库

一段时间以来,我的单元测试花费的时间比预期的要长。我尝试调试了几次,但都没有成功,因为延迟甚至在我的测试开始运行之前。这影响了我远程做任何接近测试驱动开发的能力(也许我的期望太高了),所以我想看看我是否可以一劳永逸地解决这个问题。

运行测试时,从开始到实际开始测试之间有 70 到 80 秒的延迟。例如,如果我对一个小模块(使用time python manage.py test myapp)运行测试,我会得到

1m:21 中大约有 1m18 在

线。换句话说,测试用时不到 3 秒,但数据库初始化似乎用时 1:18 分钟

我有大约 30 个应用程序,大多数都有 1 到 3 个数据库模型,所以这应该可以了解项目规模。我使用 SQLite 进行单元测试,并实施了一些建议的改进。我无法发布我的整个设置文件,但很高兴添加所需的任何信息。

我确实使用跑步者

在我的设置中:

我也尝试过使用django-nosewithdjango-nose-exclude

我已经阅读了很多关于如何自己加速测试的内容,但没有找到任何关于如何优化或避免数据库初始化的线索。我已经看到有关尝试不使用数据库进行测试的建议,但我不能或不知道如何完全避免这种情况。

请让我知道是否

  1. 这是正常的和预期的
  2. 不出所料(希望能修复或引导做什么)

同样,我不需要关于如何自己加速测试的帮助,而是初始化(或开销)。我希望上面的示例花费 10 秒而不是 80 秒。

非常感谢

我运行测试(针对单个应用程序)--verbose 3并发现这都与迁移有关:

我压制了我所有的迁移,但仍然很慢。

0 投票
1 回答
1701 浏览

django - 带有固定装置的 Django TestCase 由于重复键而导致 IntegrityError

我很难从django_nose.FastFixtureTestCaseto django.test.TestCase(甚至更保守的django.test.TransactionTestCase)迁移时遇到了麻烦。我正在使用 Django 1.7.11,并且正在针对 Postgres 9.2 进行测试。

我有一个Testcase加载三个夹具文件的类。该类包含两个测试。如果我将每个测试单独运行(manage test test_file:TestClass.test_name),它们每个都可以工作。如果我将它们一起运行,(manage test test_file:TestClass),我得到

对我来说,看起来数据库实际上并没有在测试之间被刷新或回滚,因为它只发生在我单次运行测试时。

我已经单步执行了 Django 代码,看起来它们正在被刷新或回滚——这取决于我是在尝试TestCase还是在TransactionTestCase.

(我要离开是FastFixtureTestCase因为https://github.com/django-nose/django-nose/issues/220

我还应该看什么?这似乎应该是一件简单的事情,并且在什么django.test.TestCaseDjango.test.TransactionTestCase设计的范围内。

编辑:

测试类或多或少看起来像这样:

更新:

我已经通过一次测试成功地重现了这几次,所以我怀疑夹具加载代码中存在某些问题。

0 投票
0 回答
648 浏览

python - Django 鼻子覆盖率与 manage.py 测试给出不同的 CLI 顺序相关结果

我在 Django 网站上运行简单的鼻子测试(代码可在此处获得)。根据发出 CLI 命令的顺序,我会得到截然不同的结果!

查看许多帖子,这似乎与关于加载过程的报道开始时间有关。我不明白的是:

  • 为什么两种方法的遗漏陈述如此不同?
  • 如果我一个接一个地运行一种方法,为什么覆盖率会大幅上升?

我专注于覆盖minerals/views.py

Djangosettings.py文件包含配置信息:

我在 Ubuntu 14.04LTS 上运行,使用 Python 3.5.1,使用 virtualenv 要求文件:

运行测试方法一:

当我使用 运行测试时,coverage run --source '.' manage.py test minerals缺少语句: 12-13, 18-49minerals/views.py

注意:是的,由于某种未知原因,上面运行和下面报告之间的遗漏语句数量发生了变化。

全面覆盖report -m(来自文件report_source):

运行测试方法2:

如果我使用 运行测试./manage.py test minerals,则minerals/views.py缺少语句 1-10, 16, 42

全面覆盖report -m(来自文件report_manage):

运行测试方法3:

如果我在测试运行之间删除cover/目录和.coverage文件,上面的方法 1 和 2 每次都会产生与预期相同的结果。但是,如果我运行方法 1,然后运行方法 2(将cover/目录保留.coverage在方法 1 中的位置),我会得到截然不同的结果。minerals/views.py只是缺少语句 42

全面覆盖report -m(来自文件report_sourceTHENmanage):

我不确定如何从这一点着手。我希望能够使用单个 CLI 命令获得一致的结果。

如果我需要提供更多信息来帮助调试,请告诉我!

更新:

尝试使用py.test,我能够使用以下方法获得单行覆盖:


0 投票
2 回答
2628 浏览

python - Django 鼻子给出“ImportError:无法导入名称设置”?

当我运行默认服务器时,安装在 virtualenv 中的 Django-nose 在 runner.py 中给出“ImportError:无法导入名称设置”。在进行回溯时,我得到了这个:

我在 django 文档上找到了关于django.setup()的内容,尽管像这样的大多数问题都有 pythonic 问题而不是 Django

0 投票
0 回答
92 浏览

python - Django Nose - 运行测试时需要捕获输出

我正在使用call_command. 我需要捕获输出并对其进行处理,具体取决于它是失败还是通过。我当前在管理命令中的代码:

就我而言,内容始终是一个空字符串。

我尝试了很多鼻子插件,但无法获取输出。

谢谢。

0 投票
0 回答
76 浏览

python - 鼻子没有运行所有测试

所以对于这个函数,我有一个带有文件列表的 json 文件,它们是测试

这从 json 文件(包含测试列表)中获取输入,但是一旦它检测到返回 True 的测试,wantFunction 就不会通过 json 文件(列表)中存在的其他测试。有人能说出为什么会这样吗?