【问题标题】:Can I run django tests (manage.py) from a different directory?我可以从不同的目录运行 django 测试(manage.py)吗?
【发布时间】:2015-06-22 01:21:19
【问题描述】:

我有一个非常标准的 Django 测试用例设置(我认为)

api-name
    manage.py
    api-name
        __init__.py
        settings.py
        wsgi.py
    v0
        project
            stuff.py
            tests
                test_stuff.py

ma​​nage.py

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api-name.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

wsgi.py

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api-name.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

test_stuff.py

from django.test import TestCase
from v0.project.stuff import *


class ProjectTestCase(TestCase):
    def setUp(self):
        # set stuff up

    def test_project_stuff(self):
        # test stuff

    def test_other_stuff(self):
        # test stuff

执行测试时会发生以下情况:

[cwilbur api-name]$ ./manage.py test
Creating test database for alias 'default'...
..
----------------------------------------------------------------------
Ran 2 tests in 0.014s

OK
Destroying test database for alias 'default'...
[cwilbur api-name]$ cd ..
[cwilbur source]$ ./api-name/manage.py test
Creating test database for alias 'default'...

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Destroying test database for alias 'default'...

这是(测试从项目的根目录运行,而不是从其他地方运行)预期的行为吗?有没有办法改变事情以使其正常工作(我想从不同目录中的预提交挂钩执行我的测试)?

我尝试从this answer 添加from tests import *,但没有帮助。我还尝试将 sys.path.append 行从 wsgi.py 移动到 manage.py,但这也没有帮助。

我可以尝试其他任何想法吗?

【问题讨论】:

  • 您可以将cd 命令添加到您的预提交挂钩中。
  • @dizballanze 这有一个缺点,我必须在命令末尾和任何干预退出之前添加另一个 cd 才能回到我开始的位置并且没有副作用。不要误会,如果没有别的办法,我就去做。
  • 如果你使用 bash,你可以尝试在 subshel​​l 中运行 manage.py,如下所示:(cd /somedir; ./manage.py test) 这不会产生任何副作用。

标签: python django unit-testing


【解决方案1】:

回答这个问题迟了。但希望这可以帮助某人:

python <project_path>/manage.py test <your_project_dir>

来自 Django 文档:

您还可以提供目录路径以发现该目录下的测试:

$ ./manage.py test animals/

参考资料:

  1. https://docs.djangoproject.com/en/dev/topics/testing/overview/#running-tests
  2. https://docs.python.org/3/library/unittest.html#test-discovery

【讨论】:

  • 谢谢!如果您从位于应用目录之外的 Makefile 运行测试,这将非常有用。
  • 很好的答案,让我免于头痛!
【解决方案2】:

根据@dizballanze 的 cmets 和代码审查的反馈,我最终这样做了:

(cd /somedir && python manage.py test)

我仍然很好奇是否可以在不进入项目根目录的情况下运行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 2017-05-19
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多