繁体   English   中英

用nosetests运行Django测试

[英]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
|   |   ├── ...

命令nosetestsproject目录中执行。 我希望它能正确运行带有2个Django测试用例的tests.py 我尝试在项目根目录中创建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__.pyproject/mysite鼻子发现tests.py但测试失败,因为'Apps are not loaded yet'这可能意味着我必须提前调用django.setup()但我不知道怎么做。 我找到了一个鼻子插件,但是我不能在远程机器上安装插件或更改选项。

任何想法如何使我的任何方法解决问题?

首先,如果你还没有这样做,你应该安装和配置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文件FOLDER !!!

现在,当您从项目的根目录运行nosetests时,它将运行tests文件夹中的每个测试:

~ $ cd path/to/project
path/to/project $ nosetests

由于您可以将文件添加到项目的根目录,因此您可以尝试在执行时添加一个鼻子将查找的setup.cfg文件,并在其中指定查找测试的位置:

# setup.cfg
[nosetests]
where=mysite/blog/

(请参阅文档 ,了解您可以在此处输入的参数)。

我不确定这是否会起作用(启动nose的命令可能已经指定了一个不同的配置文件),但它似乎值得一试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM