Python 我可以从其他目录运行django测试(manage.py)吗?

Python 我可以从其他目录运行django测试(manage.py)吗?,python,django,unit-testing,Python,Django,Unit Testing,我有一个非常标准的Django测试用例设置(我想) 管理.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 exe

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

管理.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)
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()
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
wsgi.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)
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()
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
test\u stuff.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)
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()
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'...
这(测试从项目的根目录运行,但不是从其他地方运行)是预期的行为吗?是否有一种方法可以改变一些事情,使其工作(我想从不同目录中的预提交挂钩执行测试)

我尝试从测试导入添加
*
,但没有帮助。我还尝试将
sys.path.append
行从wsgi.py移动到manage.py,但这也没有帮助


还有其他我可以尝试的想法吗?

根据@dizballanze的评论和代码评审的反馈,我最后做了以下工作:

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

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

稍后回答这个问题。但希望这对某人有所帮助:

python/manage.py测试

来自Django文档:

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

$ ./manage.py test animals/
参考资料:


  • 您只需将
    cd
    命令添加到预提交钩子中即可。@dizballanze的缺点是,我必须在命令末尾和任何中间退出之前添加另一张cd,以返回到我开始的位置,并且没有副作用。别误会,如果没有其他方法,我会这么做。如果使用bash,可以尝试在子shell中运行manage.py,如下所示:
    (cd/somedir;/manage.py test)
    这不会产生任何副作用。谢谢!如果你在应用程序目录外的Makefile中运行测试,这真的很有用。回答得很好,让我不再头疼了!