如何测试放在子文件夹中的django应用程序?

时间:2011-06-26 11:33:52

标签: python django unit-testing testing

我在测试分组在子文件夹中的django应用程序时遇到问题。

好吧,让我解释一下情况。

Standart django项目结构如下:

django_project/
--appname1
--appname2
--appname3
--lib
--tests
--docs
settings.py 
etc...

当项目结构为标准时,您只需在项目目录中键入命令即可为appname1运行测试:

python2 manage.py test appname1`

我们决定将所有应用程序放在子文件夹中,因此我们的项目结构如下所示:

django_project/
--apps/
----appname1
----appname2
----appname3
--lib
--tests
--docs
settings.py 
etc...

一切正常,但我们无法运行应用测试。 我尝试了以下命令但没有成功:

python2 manage.py test appname1
python2 manage.py test apps/appname1
python2 manage.py test apps.appname1

有没有办法使用manage.py为放置在子文件夹中的应用程序运行测试,或者我们应该编写自己的命令来运行它们?

UPD:

我们有以下错误:

 Traceback (most recent call last):
  File "manage.py", line 18, in <module>
    management.execute_manager(settings)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/commands/test.py", line 37, in handle
    failures = test_runner.run_tests(test_labels)
  File "/opt/python266/lib/python2.6/site-packages/django/test/simple.py", line 312, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/opt/python266/lib/python2.6/site-packages/django/test/simple.py", line 244, in build_suite
    app = get_app(label)
  File "/opt/python266/lib/python2.6/site-packages/django/db/models/loading.py", line 140, in get_app
    raise ImproperlyConfigured("App with label %s could not be found" % app_label)
django.core.exceptions.ImproperlyConfigured: App with label appname1 could not be found

我们安装的应用设置如下:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'project_name.apps.appname1',
'project_name.apps.appname2',
'project_name.apps.appname3',
 )

6 个答案:

答案 0 :(得分:17)

您的app文件夹下需要这两个文件:

__init__.py
models.py

他们可能是空的。

答案 1 :(得分:2)

你得到什么错误?你在INSTALLED_APPS的{​​{1}}下有什么?

如果您有类似

的内容
settings.py

INSTALLED_APPS = ( 'django.contrib.auth', ... 'apps.appname1', 'apps.appname2', ) 目录中的__init__.py应该可以正常工作。

答案 2 :(得分:1)

只需注意,settings.py文件包含一个元组,因此终止字符应为')'而不是'}'

答案 3 :(得分:0)

确保apps__init__.py。您应该能够通过应用名称运行测试:

python2 manage.py test appname1

这适用于Django 1.3,我还没有测试过任何其他版本。

答案 4 :(得分:0)

这是一个有点迟的答案,但是为了将来参考其他窥视,我遇到了同样的问题,发现我需要在应用程序中添加一个空的models.py文件。 (它不需要任何数据库表,但没有models.py意味着测试运行器没有提取它。)

答案 5 :(得分:0)

在django 2.2.4中,使用用于测试文件的文件夹,即\test,而不是默认的test.py文件。这就是对我有用的。

python manage.py test .\apps-folder\app1

如果您还将文件夹用于测试文件,请确保包含__init__.py