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

14

我在测试存放在子文件夹中的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个回答

20

你需要将这两个文件放在你的应用程序文件夹下:

__init__.py
models.py

它们可以为空。


2
你遇到了什么错误?在你的settings.py文件中,INSTALLED_APPS下有什么内容?
如果你的INSTALLED_APPS中有类似以下的内容:
INSTALLED_APPS = (
    'django.contrib.auth',
    ...
    'apps.appname1',
    'apps.appname2',
)

如果在apps目录中有__init__.py文件,则应该可以正常工作。

我已经对问题添加了详细信息。 - Nikolay Fominyh

1
在Django 2.2.4中,使用文件夹来存储测试文件,即\test,而不是默认的test.py文件。这是我成功的方法。
python manage.py test .\apps-folder\app1

如果您也在使用一个用于测试文件的文件夹,请确保包含一个 __init__.py 文件。

1

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


0

请确保 apps 文件夹下有一个 __init__.py 文件。您应该能够通过应用程序名称运行测试:

python2 manage.py test appname1

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


0
这个回答有点晚了,但是对于未来遇到同样问题的人来说,我也遇到了同样的问题,并发现我需要在应用程序中添加一个空的models.py文件。(它不需要任何数据库表,但是没有models.py意味着测试运行程序无法识别它。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接