使用ipython笔记本从shell运行django单元测试有奇怪的行为

时间:2014-11-14 19:34:57

标签: django unit-testing ipython ipython-notebook

我使用连接到Django shell的ipyhton笔记本来运行一些测试。我在django 1.4上。

首先,如果我按照下面的配置运行,有时它可以完美地工作,有时它只是挂起而没有输出且没有错误。我必须彻底杀死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)

1 个答案:

答案 0 :(得分:2)

就我而言,我刚刚创建了一个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-extensions提供的那个,运行:

manage.py shell_plus --notebook

希望有所帮助。