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

时间:2013-01-21 02:18:35

标签: python django selenium gunicorn

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

我需要创建一个测试服务器,就像使用djangos LiveServerTestCase一样,可以使用gunicorn。

有没有人对我如何做到这一点有任何想法?

注意:也有人确认我LiveServerTestCase是作为一个线程执行而不是一个进程

2 个答案:

答案 0 :(得分:2)

我已经阅读了代码。看LiveServerTestCase寻找灵感是有道理的,但是试图通过扩展或以某种方式调用LiveServerTestCase来做某事是在寻找麻烦和增加维护成本。

运行外观的强大方式,就像LiveServerTestCase所做的那样,是从unittest.TestCase创建一个包含自定义setUpClass和{{1}的测试用例类} 方法。 tearDownClass方法:

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

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

  2. 将所需的任何固定装置加载到数据库中。

  3. 启动一个Gunicorn实例运行这个Django应用程序实例,使用常用的OS命令。

  4. setUpClass

    1. 再次使用正常的OS命令关闭Gunicorn实例。

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

    3. 在设置和拆解之间,我们的测试会联系分配给Gunicorn的端口上的应用程序,如果需要,他们会加载更多的灯具等。

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

      1. LiveServerTestCase在一个进程中包含整个测试设置:测试,WSGI服务器和Django应用程序。 Gunicorn并非设计用于此类操作。首先,它使用主进程和工作进程。

      2. 如果修改LiveServerTestCase以某种方式在外部进程中启动Django应用程序,那么这个类的很多好处就会消失。 LiveServerTestCase 依赖这个事实,即它只能修改其进程空间中的设置或数据库连接,并且这些修改将转移到Django应用程序,因为它存在于同一进程中。如果应用程序处于不同的过程中,则这些技巧无法运行。修改LiveServerTestCase以解决此问题后,最终结果将接近我上面概述的内容。

      3. 补充:有人可以让Gunicorn和Django在同一个过程中运行吗?

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

答案 1 :(得分:1)

在我的头顶,您可以尝试覆盖LiveServerTestCase.setUpClass并结束gunicorn而不是LiveServerThread