阻止Django运行contrib测试?

时间:2010-06-12 22:56:50

标签: django testing

有没有办法阻止./manage.py testdjango.contrib.auth等已安装的应用程序运行测试?

2 个答案:

答案 0 :(得分:1)

我正在为我的项目编写一个自定义测试运行器,它遍历项目树,导入所有模块,遍历每个模块中的类,查找unittest.TestCase的子类,并将它们全部添加到TestSuite,然后运行它们。这样,我可以过滤掉django.contrib的那些,还包括我自己的一些managetest.TestCases,其中manage.py忽略(因为它们不在myapp / tests.py中等)

我只是写了它并且它无疑充满了错误,但到目前为止,这就是它的样子:

from inspect import getmembers, isclass
import os
from os.path import join, relpath
import sys
from unittest import TestCase, TestLoader, TestSuite, TextTestRunner

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from django.test.utils import setup_test_environment

sys.path.append('..')


def import_module(modname):
    print modname
    try:
        __import__(modname)
        return sys.modules[modname]
    except Exception as e:
        print
        print '    %s: %s' % (type(e).__name__, e)


def get_modules(root):
    for subdir, dirs, fnames in os.walk(root):
        for fname in fnames:
            if fname.endswith('.py'):
                path = relpath(join(subdir, fname))
                modname = path.replace('/', '.')[:-3]
                if modname.endswith('__init__'):
                    modname = modname[:-9]
                if modname == '':
                    continue
                yield import_module(modname)


def get_testcases(module):
    for name, value in getmembers(module):
        if isclass(value) and issubclass(value, TestCase) and value is not TestCase:
            print '  ', name, value
            yield value


def main():
    setup_test_environment()

    testcases = set()
    for module in get_modules(os.getcwd()):
        for klass in get_testcases(module):
            testcases.add(klass)
    print 'found %d testcases' % (len(testcases),)

    suite = TestSuite()
    for case in testcases:
        suite.addTest(TestLoader().loadTestsFromTestCase(case))

    print 'loaded %d tests' % (suite.countTestCases(),)
    TextTestRunner(verbosity=2).run(suite)


if __name__ == '__main__':
    main()

答案 1 :(得分:0)

正确的解决方案就像lazerscience所说:

python manage.py test appname appname.SomeTestCase appname.TestCase.test_method

当您只是run test command时,将测试INSTALLED_APPS中的所有应用,包括来自contrib的应用(例如auth,admin,sites等)。

此外,如果某些测试失败,则表示某些内容无法正常工作,您应该修复问题,然后隐藏失败的测试。如果Django测试失败,请确保使用稳定版本。