在应用程序有testing目录时,在Django中运行特定的testing用例

Django文档( http://docs.djangoproject.com/en/1.3/topics/testing/#running-tests )表示,您可以通过指定个别testing用例来运行它们:

$ ./manage.py test animals.AnimalTestCase 

这假设你在你的Django应用程序的tests.py文件中有你的testing。 如果这是真的,那么这个命令就像预期的那样工作。

我有一个testing目录中的Django应用程序的testing:

 my_project/apps/my_app/ ├── __init__.py ├── tests │ ├── __init__.py │ ├── field_tests.py │ ├── storage_tests.py ├── urls.py ├── utils.py └── views.py 

tests/__init__.py文件有一个suite()函数:

 import unittest from my_project.apps.my_app.tests import field_tests, storage_tests def suite(): tests_loader = unittest.TestLoader().loadTestsFromModule test_suites = [] test_suites.append(tests_loader(field_tests)) test_suites.append(tests_loader(storage_tests)) return unittest.TestSuite(test_suites) 

运行testing我做:

 $ ./manage.py test my_app 

试图指定一个单独的testing用例会引发一个exception:

 $ ./manage.py test my_app.tests.storage_tests.StorageTestCase ... ValueError: Test label 'my_app.tests.storage_tests.StorageTestCase' should be of the form app.TestCase or app.TestCase.test_method 

我试图做什么exception消息说:

 $ ./manage.py test my_app.StorageTestCase ... ValueError: Test label 'my_app.StorageTestCase' does not refer to a test 

当我的testing在多个文件中时,如何指定单个testing用例?

结帐django鼻子 。 它允许你指定testing运行,如:

 python manage.py test another.test:TestCase.test_method 

或者如注释中所述,使用语法:

 python manage.py test another.test.TestCase.test_method 

由于Django 1.6可以运行一个完整的testing用例,或者单个testing,对于你想运行的元素使用完整的点符号。

自动testing发现现在将在任何以工作目录下的testing开始的文件中findtesting,因此解决您必须重命名文件的问题,但是现在可以将其保留在您想要的目录中。 如果你想使用自定义文件名,你可以使用选项flag --pattern="my_pattern_*.py"指定一个模式(默认的Djangotesting运行器)。

因此,如果你在你的manage.py目录下,想要在app/module例子下的tests.py文件内的TestCase子类A运行test_atesting,你应该这样做:

 python manage.py test example.tests.A.test_a 

如果你不想包含一个依赖,并在Django 1.6或更高版本,这是你如何做到这一点。

文档 – > https://docs.djangoproject.com/en/stable/topics/testing/overview/

我自己也遇到了这个问题,发现了这个问题,万一有人来了,这就是我挖出来的东西。 DjangoTestSuiteRuner使用了一个名为build_test(label)的方法,根据标签计算出要运行的testing用例。 看着这个方法,事实certificate他们正在做“模型”或“testing”模块getattr()。 这意味着如果你返回一个套件,那么testing运行器就不会在那个套件中寻找你的testing用例,它只会在这些模块中寻找。

一个快速的解决方法是使用__init__.py来直接导入你的testing,而不是定义一个套件。 使它们成为“testing”模块的一部分,所以build_test(标签)可以find它们。

对于上面的例子, tests/__init__.py应该只包含:

 from field_tests import * from storage_tests import * 

这不是很优雅,当然,如果你正在试图对你的套件做一些更复杂的事情,那么这是行不通的,但是对于这种情况来说。

把这段代码放到你的__init__.py中,它将导入包和子包中的所有testing类。 这将允许您运行特定的testing,而无需手动导入每个文件。

 import pkgutil import unittest for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): module = loader.find_module(module_name).load_module(module_name) for name in dir(module): obj = getattr(module, name) if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase): exec ('%s = obj' % obj.__name__) 

同样,对于您的testing套件,您可以简单地使用:

 def suite(): return unittest.TestLoader().discover("appname.tests", pattern="*.py") 

现在所有你需要做的新的testing是写他们,并确保他们在testing文件夹。 没有更多繁琐的import维护!

我也遇到了这个问题,而不是使用Django的鼻子,我跟着这个链接在这里: http : //www.pioverpi.net/2010/03/10/organizing-django-tests-into-folders/ 。 你需要打开你的.py文件并导入你的testing。

from unique_test_file import * Ex: from unique_test_file import *

这应该是工作 –

 python manage.py test my_app.tests.storage_tests