运行 Django 使用 nosetests 进行测试
Run Django tests with nosetests
我的 python 应用程序测试是在远程服务器上使用命令 nosetests
执行的。我无法修改测试的启动方式,也无法为其添加选项。我有带测试的 Django 应用程序,但测试无法正常工作。
我的项目结构:
project
├── README.md
├── setup.py
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
命令nosetests
在project
目录中执行。我希望它正确 运行 tests.py
有 2 个 Django 测试用例。我尝试在项目根目录中创建 tests
目录并使用 DiscoverRunner
):
调用测试
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
test_dir = os.path.dirname(os.path.dirname(__file__)) # one level up
sys.path.insert(0, os.path.join(test_dir, 'mysite'))
class ServerTest(unittest.TestCase):
def test_runtests(self):
django.setup()
self.test_runner = DiscoverRunner(verbosity=1, interactive=True, failfast=False)
failures = self.test_runner.run_tests(['mysite'])
self.assertEqual(failures, 0)
它有效,但问题是所有测试都被视为单个测试,服务器生成错误报告。
另一个解决方案:如果我将空 __init__.py
添加到 project/mysite
nose 发现 tests.py
但测试失败,因为 'Apps are not loaded yet'
这可能意味着我必须调用 django.setup()
早些时候,但我不知道该怎么做。我找到了一个适用于 nose 的插件,但我无法在远程机器上安装插件或更改选项。
有什么想法可以让我的任何方法解决问题吗?
由于您可以将文件添加到项目的根目录,因此您可以尝试在其中添加一个 setup.cfg
文件,nose 将在执行时查找该文件,并在其中指定查找测试的位置:
# setup.cfg
[nosetests]
where=mysite/blog/
(请参阅 documentation 以了解您可以在此处输入的参数)。
我不确定这是否有效(启动 nose 的命令可能已经指定了要使用的不同配置文件),但似乎值得一试。
首先,您应该安装和配置 django-nose
如果您还没有这样做:
pip install django-nose
然后将其添加到您的 INSTALLED_APPS
:
INSTALLED_APPS = (
...
'django_nose'
)
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
现在为了 nosetests
命令正确地 运行,您可以创建一个名为 tests
的文件夹,其结构如下:
project
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
| | ├── ...
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
│ ├── tests
│ │ ├── __init__.py
│ │ ├── test_a_whole_class_of_methods.py
│ │ ├── test_a_whole_view.py
│ │ ├── test_one_of_my_methods.py
│ │ ├── test_another_one_of_my_methods.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
├── README.md
├── setup.py
不要忘记 tests
文件夹中的 __init__.py
文件!!!
现在,当您从项目的根目录 运行 nosetests
时,它将 运行 tests
文件夹中的每个测试:
~ $ cd path/to/project
path/to/project $ nosetests
我的 python 应用程序测试是在远程服务器上使用命令 nosetests
执行的。我无法修改测试的启动方式,也无法为其添加选项。我有带测试的 Django 应用程序,但测试无法正常工作。
我的项目结构:
project
├── README.md
├── setup.py
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
命令nosetests
在project
目录中执行。我希望它正确 运行 tests.py
有 2 个 Django 测试用例。我尝试在项目根目录中创建 tests
目录并使用 DiscoverRunner
):
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
test_dir = os.path.dirname(os.path.dirname(__file__)) # one level up
sys.path.insert(0, os.path.join(test_dir, 'mysite'))
class ServerTest(unittest.TestCase):
def test_runtests(self):
django.setup()
self.test_runner = DiscoverRunner(verbosity=1, interactive=True, failfast=False)
failures = self.test_runner.run_tests(['mysite'])
self.assertEqual(failures, 0)
它有效,但问题是所有测试都被视为单个测试,服务器生成错误报告。
另一个解决方案:如果我将空 __init__.py
添加到 project/mysite
nose 发现 tests.py
但测试失败,因为 'Apps are not loaded yet'
这可能意味着我必须调用 django.setup()
早些时候,但我不知道该怎么做。我找到了一个适用于 nose 的插件,但我无法在远程机器上安装插件或更改选项。
有什么想法可以让我的任何方法解决问题吗?
由于您可以将文件添加到项目的根目录,因此您可以尝试在其中添加一个 setup.cfg
文件,nose 将在执行时查找该文件,并在其中指定查找测试的位置:
# setup.cfg
[nosetests]
where=mysite/blog/
(请参阅 documentation 以了解您可以在此处输入的参数)。
我不确定这是否有效(启动 nose 的命令可能已经指定了要使用的不同配置文件),但似乎值得一试。
首先,您应该安装和配置 django-nose
如果您还没有这样做:
pip install django-nose
然后将其添加到您的 INSTALLED_APPS
:
INSTALLED_APPS = (
...
'django_nose'
)
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
现在为了 nosetests
命令正确地 运行,您可以创建一个名为 tests
的文件夹,其结构如下:
project
├── mysite
│ ├── blog
│ │ ├── __init__.py
│ │ ├── models.py
| | ├── ...
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
| | ├── ...
│ ├── tests
│ │ ├── __init__.py
│ │ ├── test_a_whole_class_of_methods.py
│ │ ├── test_a_whole_view.py
│ │ ├── test_one_of_my_methods.py
│ │ ├── test_another_one_of_my_methods.py
| | ├── ...
│ ├── db.sqlite3
│ ├── manage.py
├── README.md
├── setup.py
不要忘记 tests
文件夹中的 __init__.py
文件!!!
现在,当您从项目的根目录 运行 nosetests
时,它将 运行 tests
文件夹中的每个测试:
~ $ cd path/to/project
path/to/project $ nosetests