2013-01-21 68 views
11

我正在用gunicorn在django上運行一個應用程序。我正在嘗試使用硒來測試我的應用程序,但遇到了問題。如何在使用gunicorn時設置django測試服務器?

我需要一個像與Django的LiveServerTestCase將與gunicorn工作完成創建一個測試服務器。

任何人不會有我如何能做到這一點的任何想法?

注:也可能有人確認我LiveServerTestCase作爲一個線程不是一個過程

+0

LiveServerTestCase作爲線程執行https://github.com/django/django/blob/master/django/test/testcases.py#L1009 –

+1

運行「LiveServerTestCase」時,Django啓動自己的WSGI服務器。你真的需要gunicorn來做你想做的事嗎? – Louis

+1

是的,因爲我需要WSGI服務器Django沒有提供的SSL和其他生產特性。 –

回答

1

關我的頭頂執行,你可以嘗試重寫LiveServerTestCase.setUpClass和風能gunicorn代替LiveServerThread

2

我已閱讀代碼。縱觀LiveServerTestCase靈感是有道理的,但努力編造通過延長或以某種方式調用LiveServerTestCase是自討苦吃和維護成本增加的東西。

一個強大的方式來運行它看起來像什麼LiveServerTestCase確實是從unittest.TestCase一個測試用例類創建自定義setUpClasstearDownClass方法。該setUpClass方法:

  1. 設置了Django應用程序的適當的測試設置的實例:在一個位置的數據庫,將不與任何其他干擾,記錄到相應的地方日誌和,如果電子郵件是在正常操作期間發送,電子郵件設置,不會讓你的系統管理員想掐死你,等

    [事實上,這是一個部署過程。因爲我們希望最終部署我們的應用程序,上述過程是一個我們應該發展反正]

  2. 加載任何固定裝置都需要到數據庫中。

  3. 啓動一個Gunicorn實例運行Django應用程序的這個實例,使用這個常用的OS命令。

tearDownClass

  1. 將關閉Gunicorn情況下,再次使用正常的操作系統命令。

  2. 刪除這是爲測試創建的數據庫,刪除任何日誌文件可能已創建等

,並將設置之間和拆除我們的測試與應用程序分配給Gunicorn端口和如果需要,他們會加載更多的燈具等。

爲什麼不嘗試使用修改的LiveServerTestCase

  1. LiveServerTestCase包括在一個過程中,整個測試設置:測試中,WSGI服務器和Django應用程序。 Gunicorn不是爲這種操作而設計的。首先,它使用主進程和工作進程。

  2. 如果LiveServerTestCase被修改以某種方式啓動外部進程的Django應用程序,那麼這個類的好處一個很好的協議走出去的窗口。 LiveServerTestCase的事實是,它可以只修改設置或數據庫連接在其進程空間中,並且這些修改將結轉到Django應用程序,因爲它生活在同一個進程依賴。如果應用程序處於不同的進程中,則這些技巧無法運行。一旦LiveServerTestCase被修改,以照顧這,最終的結果是接近我先前提到。

附加:可能有人得到Gunicorn和Django的在同一個進程中運行?

我敢肯定有人可以膠水他們在一起,但考慮以下。這肯定意味着改變,因爲Gunicorn Gunicorn的核心代碼設計使用主機和工作進程。然後,這個人誰創造了膠水將負責保持這種膠達時Gunicorn或者Django的內部以這樣的方式,使膠破更改日期。在這一天結束時,這樣做需要比使用本答案開頭概述的方法更多的工作。

+0

關於使用類似https://github.com/kennethreitz/gunicorn-meat/什麼? –

+0

如果我想要在同一個進程上運行Gunicorn和Django,該怎麼辦?這將有助於更輕鬆地調試測試。 –

+1

Gunicorn肉的目標是「從Python編寫Gunicorn腳本」。能夠以任意Python代碼編程啓動Gunicorn(例如''import gunicorn_starter; gunicorn_start.start_gunicorn(someconfig)'')將符合該目標,但仍不會允許您執行任何您想要的操作,因爲它不會改變Gunicorn想要將自己分解爲主從進程的事實。 – Louis

相關問題