2012-11-13 43 views
5

我使用Tox來檢查我開發的系統在新環境中安裝時是否運行正常(正常檢查setup.py文件)。但是,系統使用memcached服務器,理想情況下,我想爲每個Tox運行產生一個新服務器。Python/tox,在測試前啓動進程,完成後關閉進程

是否有一種首選方式在測試運行之前啓動程序(之後關閉它們)還是需要編寫自定義運行程序?

編輯:測試運行是py.test

+1

您應該在_tox_中使用實際單元測試框架的_setup_函數/方法(_py.test_,_nose_,_unittests_,...)。 –

+0

好主意! 「子流程」的實現非常輕鬆。讓它成爲答案,我會接受它。 –

+0

執行說明:'conftest.py'中的'pytest_configure'和'pytest_unconfigure'是產生/終止的好地方。 –

回答

2

這不是tox的任務。我的建議是,您在tox的實際單元測試框架的setup函數/方法(py.test,nose,unittests,...)中使用。

樓主的評論:

pytest_configurepytest_unconfigureconftest.py是產卵/終止 好地方。

+0

pytest_configure/unconfigure不是最好的,因爲它們在分佈式測試(pytest-xdist插件)中效果不佳。 py.test 2.3版本引入了增強的fixtures API來解決這個問題,用@ pytest.fixture(scope ='session')來標記燈具以創建一個會話範圍的燈具。 – flub

1

我建議你使用paver - http://paver.github.com/paver/ - 爲產卵並關閉您的memcached服務器或您需要任何額外的「雜的系統管理員任務」的下在執行setup.py時執行tox

+0

但是你不能輕鬆地運行沒有tox的測試。與底層測試跑步者一起做更適合我認爲。 – hpk42

6

詳細說明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的夾具對象,很好地將測試配置封裝在一個位置(夾具功能)。有關更多示例,請參閱文檔。

+0

比我最初的實現好得多。我會爲此而努力的。 –

相關問題