2014-11-14 49 views
1

我使用连接到Django外壳的ipyhton笔记本运行一些测试。我在Django 1.4上。从ipython笔记本运行django单元测试有奇怪的行为

首先,如果我按照以下配置运行,有时它可以完美运行并在其他时间运行,只是挂起时没有输出且没有错误。我要彻底杀灭ipyhton内核并关闭所有的笔记本电脑,然后再试一次(当挂起事件发生时,所有打开的笔记本电脑停止工作)

如果我从unittest.TestCase而不是django.test.TestCase继承它完美的作品每一次。但是,我需要后者,所以我可以在我的实际测试中使用django的TestCase.client。

注意:在这两种情况下,我跳过测试数据库,因为我在缺少芹菜数据库时出现故障。另一次我会穿过那座桥。

笔记本:

from django.utils import unittest 
from django.test import TestCase 
from django.test.utils import setup_test_environment 
from django.test.simple import DjangoTestSuiteRunner 


class MyTestCase(TestCase): 
    def test_001(self): 
     print "ok" 
    def test_002(self): 
     self.assertEqual(True , True) 

if __name__ == '__main__': 
    setup_test_environment() 
    runner = DjangoTestSuiteRunner(verbosity=1, interactive=True, failfast=True) 
    suite = unittest.TestLoader().loadTestsFromTestCase(MyTestCase) 
    #old_config = runner.setup_databases() 
    result = runner.run_suite(suite) 
    #runner.teardown_databases(old_config) 
    runner.suite_result(suite, result) 
+0

通常不会使用iPython笔记本来运行测试,因为有一个shell命令可以这么做 - “python manage.py test”。 – 2014-11-15 09:49:54

+0

了解,这是不正常的程序。充分了解管理命令。从来没有这么少,有这个问题,我不明白为什么它不应该工作。 – arctelix 2014-11-15 16:42:08

回答

1

以我为例,我刚刚创建了一个test_runner函数,它接受一个test_class参数,如:

def test_runner(test_class): 
    from django.utils import unittest 
    from django.test.utils import setup_test_environment 
    from django.test.simple import DjangoTestSuiteRunner 
    setup_test_environment() 
    runner = DjangoTestSuiteRunner(verbosity=1, interactive=True, failfast=True) 
    suite = unittest.TestLoader().loadTestsFromTestCase(test_class) 
    result = runner.run_suite(suite) 
    runner.suite_result(suite, result) 

之后,你可以只运行:

test_runner(MyTestCase) 

在ipython笔记本中。

确保使用的是由真实Django的扩展提供了一个通过运行:

manage.py shell_plus --notebook 

希望有所帮助。

+0

对于django 1.8+使用'from django.test.runner import DiscoverRunner'而不是'from django.test.simple import DjangoTestSuiteRunner' – 2017-10-02 20:23:24