跳转到主要内容

基于unittest2测试发现的Django测试运行器。

项目描述

一个替代的Django TEST_RUNNER,它使用在设置中指定的基本路径的unittest2测试发现,或任何其他指定给test管理命令的模块或包 - 包括应用程序测试。

如果您只运行 ./manage.py test,它将发现并运行当前工作目录下所有的测试。例如,如果您运行 ./manage.py test full.dotted.path.to.test_module,它将运行该模块中的测试(您也可以传递多个模块)。如果您提供一个指向包(如Django应用)的单个点路径,例如 ./manage.py test myapp,并且该包本身不直接包含任何测试,它将在该包的所有子模块中进行测试发现。

为什么?

Django 自身的测试发现与 Django 应用的目录结构紧密相关,部分原因是历史原因(unittest库长时间没有自己的发现功能),这阻止了 Django 应用作者成为好的 Python 用户。django-discover-runner 使用 Django 包含的新 unittest2 库的官方测试发现功能。

默认情况下,无法将特定于项目的测试放入 Django 项目的 Python 包之外的单独文件夹中,这是一种很好的组织代码的方法,将测试代码与非测试代码分开。django-discover-runner 帮助您整理项目测试。

默认情况下,无法将测试模块、函数、类或方法的全点导入路径指定给 test 管理命令,但只能指定 Django 的奇特标准 <appname>.<TestClassName>。django-discover-runner 允许您指定任何类型的标签给 Django 的测试管理命令。

默认情况下,Django 的测试运行器将执行 Django 自身的 contrib 应用的测试,如果您只想运行您自己的应用或项目的测试,这是没有意义的。django-discover-runner 通过允许您指定要运行的测试并组织您的测试代码来解决这个问题,使其超出 Django 测试运行器的范围。

更多原因可以在 Carl Meyer 关于 Testing and Django幻灯片)的优秀演讲中找到。

安装

使用您喜欢的安装程序进行安装,例如。

pip install -U django-discover-runner

django-discover-runner 至少需要 Django 1.4,并且也适用于 1.5.x。从 Django 1.6 开始,发现运行器是内置的。

设置

  • TEST_RUNNER(必需)需要指向 DiscoverRunner 类以启用它

    TEST_RUNNER = 'discover_runner.DiscoverRunner'
  • 'discover_runner' 添加到您的 INSTALLED_APPS 设置中,以便在使用 test 管理命令时覆盖下面的发现设置。

  • TEST_DISCOVER_TOP_LEVEL(可选)应该是包含您的顶级包的目录;换句话说,应该包含您的代码可以从中导入的目录。例如,这是包含 manage.py 的新 Django 1.4 项目布局中的目录。管理命令选项称为 --top-level

  • TEST_DISCOVER_PATTERN(可选)是在发现测试时使用的模式,默认为 unittest2 标准的 test*.py。管理命令选项称为 --pattern

示例

Django 应用

为了测试可重用Django应用,建议在您的应用包中添加一个test_settings.py文件,以便使用test管理命令轻松运行应用测试。只需将TEST_RUNNER设置项设置为'discover_runner.DiscoverRunner',配置运行测试所需的其他设置,并使用应用包名调用test管理命令,例如:

django-admin.py test --settings=myapp.test_settings myapp

Django项目

如果您想测试一个项目并希望将项目的测试存储在项目主包之外(推荐),您可以简单地按照上述应用说明进行操作,将其应用于“项目”包,但设置一些附加设置以告知测试运行器查找测试

from os import path
TEST_DISCOVER_TOP_LEVEL = path.dirname(path.dirname(__file__))

这将查找顶层“tests”包中的所有测试。运行测试就像调用一样简单

django-admin.py test --settings=mysite.test_settings tests

或者,您还可以指定--top-level-directory管理命令选项。

多个Django版本

如果您想在旧版Django版本以及Django >= 1.6上测试您的应用,您只需在测试设置中条件性地配置测试运行器,例如:

import django

if django.VERSION[:2] < (1, 6):
  TEST_RUNNER = 'discover_runner.DiscoverRunner'

变更日志

1.0 06/15/2013

  • 好消息! 此运行器被添加到Django 1.6中作为新的默认选项!此版本将此运行器回滚到Django 1.4.x和1.5.x。

  • 移除了TEST_DISCOVER_ROOT设置项,转而采用unittest2自己的方式来确定根。

  • 停止支持Django 1.3.x。

0.4 04/12/2013

  • 添加了使用自定义测试管理命令覆盖发现设置的能力。

0.3 01/28/2013

  • 修复了setup.py以在Python 3上工作。这应该使此应用与Python 3兼容。

0.2.2 09/04/2012

  • 当使用模块路径作为测试标签时停止设置顶级变量,因为这会错误地假设父目录是顶级目录。

0.2.1 08/20/2012

  • 修复了一个相当奇特的错误,该错误是由于错误的导入和Django围绕unittest2模块(如果可用)或Python >= 2.7上的unittest的方式包装自身而引起的。

0.2 05/26/2012

  • 添加了使用可选安装的unittest2库的能力,适用于Django < 1.3的项目(其中unittest2被添加到django.utils.unittest包中)。

0.1.1 05/23/2012

  • 修复了阻止基于项目的功能正确工作的错误。

0.1 05/20/2012

  • 首次发布,支持Django >= 1.3。

感谢

此测试运行器是对Carl Meyer的DiscoveryRunner的谦卑模仿,他将其作为gist发布了一段时间。所有的赞誉都应该归功于他。谢谢,Carl!

这也与问题#17365密切相关,这最终导致了Django中默认测试运行器的替换。再次感谢,Carl!

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django-discover-runner-1.0.tar.gz (9.2 kB 查看哈希值)

上传于

构建分发版

django_discover_runner-1.0-py2.py3-none-any.whl (12.1 kB 查看哈希)

上传于 Python 2 Python 3

由以下支持