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

2024-09-29 21:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我需要创建一个与djangosLiveServerTestCase一起工作的测试服务器。在

有人知道我怎么做吗?在

注意:还有人能确认LiveServerTestCase是作为线程而不是进程执行的吗


Tags: django服务器应用程序进程selenium线程gunicornliveservertestcase
2条回答

在我的头顶上,你可以尝试覆盖LiveServerTestCase.setUpClass并结束gunicorn而不是{}

我已经读过密码了。从LiveServerTestCase中寻找灵感是有道理的,但是试图通过扩展或调用{}来做一些事情是在自找麻烦并增加维护成本。在

一种健壮的运行方法是从unittest.TestCase创建一个具有自定义setUpClasstearDownClass方法的测试用例类。setUpClass方法:

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

    [实际上,这是一个部署过程。由于我们希望最终部署我们的应用程序,因此我们应该开发上述流程

  2. 将所需的任何设备加载到数据库中。

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

tearDownClass

  1. 再次使用正常的操作系统命令关闭Gunicorn实例。

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

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

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

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

  2. 如果LiveServerTestCase被修改为以某种方式在外部进程中启动Django应用程序,那么这个类的许多好处就不存在了。LiveServerTestCase依赖于这样一个事实,即它可以在其进程空间中修改设置或数据库连接,并且这些修改将传递到Django应用程序,因为它位于同一进程中。如果应用程序处于不同的进程中,这些技巧将无法工作。一旦修改LiveServerTestCase来处理这个问题,最终结果与我上面概述的结果非常接近。

另外:有人能让Gunicorn和Django运行在同一个进程中吗?在

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

相关问题 更多 >

    热门问题