Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用gunicorn时如何设置django测试服务器?_Python_Django_Selenium_Gunicorn - Fatal编程技术网

Python 使用gunicorn时如何设置django测试服务器?

Python 使用gunicorn时如何设置django测试服务器?,python,django,selenium,gunicorn,Python,Django,Selenium,Gunicorn,我正在用gunicorn在django运行一个应用程序。我正在尝试使用selenium测试我的应用程序,但遇到了一个问题 我需要创建一个测试服务器,如djangosLiveServerTestCase,它将与gunicorn一起工作 有人知道我该怎么做吗 注意:如果有人能确认LiveServerTestCase是作为线程而不是进程执行的,您可以尝试覆盖LiveServerTestCase.setUpClass,并关闭gunicorn,而不是LiveServerThread,我已经阅读了代码。查看

我正在用gunicorn在django运行一个应用程序。我正在尝试使用selenium测试我的应用程序,但遇到了一个问题

我需要创建一个测试服务器,如djangos
LiveServerTestCase
,它将与gunicorn一起工作

有人知道我该怎么做吗


注意:如果有人能确认
LiveServerTestCase
是作为线程而不是进程执行的,您可以尝试覆盖
LiveServerTestCase.setUpClass
,并关闭gunicorn,而不是
LiveServerThread

,我已经阅读了代码。查看
LiveServerTestCase
以获得灵感是有道理的,但试图通过扩展或调用
LiveServerTestCase
来编造一些东西会带来麻烦和增加维护成本

运行类似于
LiveServerTestCase
的健壮方法是从
unittest.TestCase
创建一个带有自定义
setUpClass
tearDownClass
方法的测试用例类。
setUpClass
方法:

  • 使用适合测试的设置设置Django应用程序的实例:位于不会干扰任何其他内容的位置的数据库,记录到适当位置的日志,以及在正常操作期间发送电子邮件时,使用不会使系统管理员想扼杀您的电子邮件设置,等等

    [实际上,这是一个部署过程。因为我们希望最终部署我们的应用程序,所以我们无论如何都应该开发上面的过程。]

  • 将所需的任何装置加载到数据库中

  • 启动Gunicorn实例运行Django应用程序的此实例,并为此使用常用的OS命令

  • 拆卸类

  • 再次使用普通操作系统命令关闭Gunicorn实例

  • 删除为测试而创建的数据库,删除可能已创建的任何日志文件,等等

  • 在安装和拆卸之间,我们的测试会联系分配给Gunicorn的端口上的应用程序,如果需要,他们会加载更多的夹具,等等

    为什么不尝试使用修改后的
    LiveServerTestCase

  • LiveServerTestCase
    将整个测试设置包含在一个过程中:测试、WSGI服务器和Django应用程序。Gunicorn不是为这样操作而设计的。首先,它使用主进程和辅助进程

  • 如果对
    LiveServerTestCase
    进行修改,以某种方式在外部进程中启动Django应用程序,那么这个类的许多好处都将消失
    LiveServerTestCase
    依赖于这样一个事实,即它可以只修改其进程空间中的设置或数据库连接,并且这些修改将延续到Django应用程序,因为它位于同一进程中。如果应用程序处于不同的过程中,这些技巧将无法工作。一旦修改了
    LiveServerTestCase
    来解决这个问题,最终结果就接近我上面概述的结果

  • 附加:有人能让Gunicorn和Django在同一个进程中运行吗


    我确信有人可以把它们粘在一起,但请考虑以下几点。这当然意味着要更改Gunicorn的核心代码,因为Gunicorn设计为使用主进程和工作进程。然后,当Gunicorn或Django的内部结构发生变化,导致胶水破裂时,胶水的创造者将负责使胶水保持最新状态。在一天结束时,这样做需要比使用本答案开头所述的方法更多的工作。

    LiveServerTestCase作为线程执行。当您运行
    LiveServerTestCase
    时,Django会启动自己的WSGI服务器。你真的需要gunicorn来完成你想要做的事情吗?是的,因为我需要SSL和其他WSGI服务器Django不提供的生产功能。如果我真的想在同一个进程上运行gunicorn和Django呢?Gunicorn meat的目标是“从Python编写Gunicorn脚本”。能够从任意Python代码(例如,
    import Gunicorn\u starter;Gunicorn\u start.start\u Gunicorn(someconfig)
    )以编程方式启动Gunicorn符合这一目标,但仍然不允许您执行所需操作,因为这并没有改变Gunicorn希望将自己分为主进程和从进程的事实。关于Gunicorn和Django在同一进程中的问题,我已经补充了我的答案。