如何测试位于子文件夹中的Django应用?

14 投票
6 回答
8232 浏览
提问于 2025-04-16 20:19

我在测试放在子文件夹里的Django应用时遇到了问题。

让我来解释一下情况。

标准的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来运行放在子文件夹里的应用的测试,还是我们需要自己写一个命令来运行它们?

更新:

我们遇到了以下错误:

 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 个回答

1

这里有个小提示,settings.py 文件里面有一个元组,所以结束的符号应该是')',而不是'}'。

2

你遇到了什么错误?在你的 settings.py 文件里的 INSTALLED_APPS 下面有什么内容?

如果你有类似下面的内容

INSTALLED_APPS = (
    'django.contrib.auth',
    ...
    'apps.appname1',
    'apps.appname2',
)

并且在 apps 文件夹里有一个 __init__.py 文件,那应该就能正常工作了。

20

你需要在你的应用文件夹里放这两个文件:

__init__.py
models.py

这两个文件可以是空的。

撰写回答