我可以从不同的目录运行django测试(manage.py)吗?

Chu*_*bur 7 python django unit-testing

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

api-name
    manage.py
    api-name
        __init__.py
        settings.py
        wsgi.py
    v0
        project
            stuff.py
            tests
                test_stuff.py
Run Code Online (Sandbox Code Playgroud)

manage.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)
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这是我执行测试时会发生的事情:

[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'...
Run Code Online (Sandbox Code Playgroud)

这是(测试从项目的根目录运行,但不是从其他地方运行)预期的行为?有没有办法改变它以便它可以工作(我想从不同目录中的预提交钩子执行我的测试)?

我尝试from tests import *这个答案添加,但它没有帮助.我也尝试sys.path.append将这行从wsgi.py移到manage.py,但这也无济于事.

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

Ken*_*chi 7

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

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

从另一个目录运行Django测试

从Django文档中:

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

$ ./manage.py test animals/
Run Code Online (Sandbox Code Playgroud)

参考文献:

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

  • 谢谢!如果您从位于应用程序目录之外的 Makefile 运行测试,这非常有用。 (2认同)

Chu*_*bur 2

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

(cd /somedir && python manage.py test)
Run Code Online (Sandbox Code Playgroud)

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