在Django中运行服务器之前,是否有任何方法可以强制运行测试?我有一个项目,很多人将在该项目上进行,因此我想在运行之前强制进行测试,并且所有测试必须在运行之前通过。因此,基本上锁定runserver命令,直到所有测试成功通过为止。 此实施过程将持续一段时间,不会持续很长时间。
答案 0 :(得分:0)
答案 1 :(得分:0)
我同意@LFDMR,这可能不是一个好主意,并且会使您的开发过程效率低下。甚至在进行测试驱动的开发时,使用开发服务器来弄清楚为什么测试未通过也是非常明智的。我认为最好在版本控制系统中使用Git预提交或预推钩子或类似的工具。
话虽如此,这是您如何实现自己追求的目标:
您可以通过向其中一个应用程序添加相同名称的管理命令来覆盖现有的管理命令。
因此,您必须在其中一个类似于以下的应用中创建文件management/commands/runserver.py
:
from django.core import management
from django.core.management.commands.runserver import BaseRunserverCommand
class Command(BaseRunserverCommand):
def handle(self, *args, **kwargs):
call_command('test') # calls `sys.exit(1)` on test failure
super().handle(*args, **kwargs)
如果我是您团队中的开发人员,那么我要做的第一件事就是删除该文件;)
答案 2 :(得分:0)
在模块execute_from_command_line([sys.argv[0], 'test'])
的功能execute_from_command_line(sys.argv)
中main()
的{{1}}之前添加此行manage.py
。它可以解决您的问题。 main()
如下所示:
def main():
# settings, import execute_from_command_line in 'try except' block
if (os.environ.get('RUN_MAIN') != 'true') & (sys.argv[1] == 'runserver'): # just run once when execute command 'manage.py runserver' but not other commands
execute_from_command_line([sys.argv[0], 'test']) # run ALL the test first
execute_from_command_line(sys.argv)
,或者您可以指定要测试的模块:execute_from_command_line([sys.argv[0], 'test', 'specific_module'])
或使用文件模式:
execute_from_command_line([sys.argv[0], 'test', '--pattern=tests*.py'])