【问题标题】:How to see which tests were run during Django's manage.py test command如何查看在 Django 的 manage.py test 命令期间运行了哪些测试
【发布时间】:2014-02-25 08:16:53
【问题描述】:

使用 Django 的 manage.py test 命令完成测试执行后,只有通过的测试数量会打印到控制台。

(virtualenv) G:\Project\>python manage.py test
Creating test database for alias 'default'...
True
..
----------------------------------------------------------------------
Ran 2 tests in 0.017s

OK
Destroying test database for alias 'default'...

有什么办法可以看到:

  1. 实际执行了哪些测试
  2. 来自哪个模块
  3. 按什么顺序

我在文档中没有找到任何解决方案。

【问题讨论】:

    标签: python django unit-testing django-unittest


    【解决方案1】:

    您可以将-v 2 传递给test 命令:

    python manage.py test -v 2
    

    运行此命令后,您将得到类似的结果(我使用的是 django 2,请随意忽略迁移/数据库的内容):

    Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
    Operations to perform:
      Synchronize unmigrated apps: messages, staticfiles
      Apply all migrations: admin, auth, contenttypes, sessions
    Synchronizing apps without migrations:
      Creating tables...
       Running deferred SQL...
    Running migrations:
      Applying contenttypes.0001_initial... OK
      ...
      Applying sessions.0001_initial... OK
    System check identified no issues (0 silenced).
    test_equal_hard (polls.tests.TestHard) ... ok      <--------+
    test_equal_simple (polls.tests.TestSimple) ... ok  <--------+
                                                                |
                                                                |
               That's your tests!  >----------------------------+
    

    顺便说一句,v 代表冗长(你也可以使用--verbosity=2):

    python manage.py test --verbosity=2
    

    这是python manage.py test --help的摘录:

    -v {0,1,2,3}, --verbosity {0,1,2,3}

    详细程度; 0=最小输出,1=正常输出, 2=详细输出,3=非常详细的输出

    【讨论】:

    • 我尝试了所有详细级别,但找不到显示没有迁移/数据库输出的单元测试的级别。如果没有 3rd 方库,这真的不可能吗?
    • 要隐藏迁移日志,您可以执行类似python manage.py test -v 2 | grep test*
    【解决方案2】:

    奈杰尔的回答很棒,而且绝对是入门门槛最低的选择。但是,您可以使用django_nose 获得更好的反馈(而且设置起来并不困难;)。

    以下来自:BDD with Python

    首先:安装一些要求:

    pip install nose pinocchio django_nose
    

    然后将以下内容添加到settings.py

    TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
    NOSE_ARGS = ['--with-spec', '--spec-color']
    

    然后正常运行测试:

    python manage.py test
    

    输出应该是这样的:

    注意:您所测试的 cmets 可用于提供比名称更好的输出。

    例如:

    def test_something(self):
        """Something should happen"""
        ...
    

    运行测试时会输出“Something should occur”。

    加分项:您还可以生成/输出您的代码覆盖率:

    pip install coverage
    

    在 settings.py 中将以下内容添加到您的 NOSE_ARGS:'--with-coverage', '--cover-html', '--cover-package=.', '--cover-html-dir=reports/cover'

    例如:

    NOSE_ARGS = ['--with-spec', '--spec-color', 
             '--with-coverage', '--cover-html', 
             '--cover-package=.', '--cover-html-dir=reports/cover']
    

    然后,当您运行 python manage.py test 时,您将获得一个很好的代码覆盖率摘要,以及在 reports/cover 中的一个简洁的 html 报告

    【讨论】:

    • 嗨@toast38coza。这很整洁。我是 Python 新手,很高兴看到格式良好的测试输出。我正在寻找 NOSE_ARGS 的文档,但我发现的内容都没有显示 --With-spec 和类似的。你能指点我吗?我基本上是想防止鼻子重复“类似于 TransactionTestCase,但使用transaction.atomic() 来实现测试隔离......nTestCase 可能是必要的(例如测试一些事务行为)。”
    • @MacarioTala --with-spec 参数来自pinocchio 插件(你可以 pip install )。看看上面说的:“首先安装一些要求”。
    • 是的。我已经安装好了。让我试着找到有关木偶奇遇记的文档。谢谢!
    • 为了分享,我换掉了匹诺曹,因为它有点太冗长了,而不是分叉,我发现了这个:gfxmonk.net/dist/0install/rednose.xml,你可能也会喜欢它。
    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多