如何查看在 Django 的 manage.py test 命令期间运行了哪些测试
Posted
技术标签:
【中文标题】如何查看在 Django 的 manage.py test 命令期间运行了哪些测试【英文标题】:How to see which tests were run during Django's manage.py test command 【发布时间】: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】:您可以将-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,你可能也会喜欢它。以上是关于如何查看在 Django 的 manage.py test 命令期间运行了哪些测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django 中的 manage.py CLI 从数据库中删除所有表?
如何解决在 Django 中执行 manage.py runserver 命令时的错误原因?
如何直接从测试驱动程序调用自定义 Django manage.py 命令?
如何仅使用 django manage.py makemessages 创建 .pot 文件