【问题标题】:Running django unit tests from shell with ipython notebook has strange behavior使用 ipython notebook 从 shell 运行 django 单元测试有奇怪的行为
【发布时间】:2015-01-12 06:57:57
【问题描述】:

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

首先,如果我按照下面的配置运行,有时它可以完美运行,有时它只是挂起,没有输出也没有错误。我必须完全杀死ipyhton内核并关闭所有笔记本并重试(当挂起事件发生时,所有打开的笔记本都停止工作)

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

注意:在这两种情况下,我都跳过了测试数据库,因为我在缺少 celery 数据库时遇到了故障。我会在其他时间过那座桥。

笔记本:

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)

【问题讨论】:

  • 通常不会使用 iPython notebook 来运行测试,因为有一个 shell 命令可以这样做 - python manage.py test
  • 了解,这不是正常的程序。充分了解管理指挥。尽管如此,还是有这个问题,我看不出它不应该工作的任何原因。

标签: django unit-testing ipython ipython-notebook


【解决方案1】:

就我而言,我刚刚创建了一个接受test_class 参数的test_runner 函数,如下所示:

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

希望对您有所帮助。

【讨论】:

  • 对于 django 1.8+ 使用 from django.test.runner import DiscoverRunner 而不是 from django.test.simple import DjangoTestSuiteRunner
猜你喜欢
  • 2015-09-04
  • 2016-02-22
  • 2015-05-04
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多