我使用Tox來檢查我開發的系統在新環境中安裝時是否運行正常(正常檢查setup.py
文件)。但是,系統使用memcached
服務器,理想情況下,我想爲每個Tox
運行產生一個新服務器。Python/tox,在測試前啓動進程,完成後關閉進程
是否有一種首選方式在測試運行之前啓動程序(之後關閉它們)還是需要編寫自定義運行程序?
編輯:測試運行是py.test
我使用Tox來檢查我開發的系統在新環境中安裝時是否運行正常(正常檢查setup.py
文件)。但是,系統使用memcached
服務器,理想情況下,我想爲每個Tox
運行產生一個新服務器。Python/tox,在測試前啓動進程,完成後關閉進程
是否有一種首選方式在測試運行之前啓動程序(之後關閉它們)還是需要編寫自定義運行程序?
編輯:測試運行是py.test
這不是tox
的任務。我的建議是,您在tox
的實際單元測試框架的setup
函數/方法(py.test
,nose
,unittests
,...)中使用。
樓主的評論:
pytest_configure
和pytest_unconfigure
在conftest.py
是產卵/終止 好地方。
pytest_configure/unconfigure不是最好的,因爲它們在分佈式測試(pytest-xdist插件)中效果不佳。 py.test 2.3版本引入了增強的fixtures API來解決這個問題,用@ pytest.fixture(scope ='session')來標記燈具以創建一個會話範圍的燈具。 – flub
我建議你使用paver
- http://paver.github.com/paver/ - 爲產卵並關閉您的memcached
服務器或您需要任何額外的「雜的系統管理員任務」的下在執行setup.py
時執行tox
。
但是你不能輕鬆地運行沒有tox的測試。與底層測試跑步者一起做更適合我認爲。 – hpk42
詳細說明flub對使用py.test進行處理的最佳方式的評論,使用它的fixture mechanism。與此內容創建一個conftest.py文件:
# content of conftest.py
import pytest, subprocess
@pytest.fixture(scope="session", autouse=True)
def startmemcache(request):
proc = subprocess.Popen(...)
request.addfinalizer(proc.kill)
的「autouse」標誌意味着該夾具將每次測試運行啓動,而無需從測試的任何引用。然而,在實踐中,您可能希望將連接細節提供給測試可用的子進程,以便您不必使用魔術端口號。您不會使用「autouse」,而是返回一個用於連接到memcache的夾具對象,很好地將測試配置封裝在一個位置(夾具功能)。有關更多示例,請參閱文檔。
比我最初的實現好得多。我會爲此而努力的。 –
您應該在_tox_中使用實際單元測試框架的_setup_函數/方法(_py.test_,_nose_,_unittests_,...)。 –
好主意! 「子流程」的實現非常輕鬆。讓它成爲答案,我會接受它。 –
執行說明:'conftest.py'中的'pytest_configure'和'pytest_unconfigure'是產生/終止的好地方。 –