2012-11-13 6 views
5

किया मुझे लगता है कि प्रणाली मैं विकासशील हूँ अच्छी तरह से जब एक ताजा वातावरण में स्थापित बर्ताव कर रही है (+ विवेक setup.py फ़ाइल की जाँच) की जाँच करने के Tox उपयोग कर रहा हूँ। हालांकि, सिस्टम memcached सर्वर का उपयोग करता है, और आदर्श रूप से मैं प्रत्येक Tox रन के लिए एक नया स्पॉन करना चाहता हूं।अजगर/tox,, परीक्षण से पहले एक प्रक्रिया शुरू इसे बंद जब

क्या परीक्षण चलाने से पहले प्रोग्राम शुरू करने का कोई पसंदीदा तरीका है (और बाद में उन्हें बंद करें) या मुझे कस्टम धावक लिखने की आवश्यकता होगी?

संपादित करें: परीक्षण धावक py.test

+1

आपको वास्तविक इकाई परीक्षण ढांचे (_py.test_, _nose_, _unittests_, ...) के _setup_ फ़ंक्शंस/विधियों में शायद यह करना चाहिए, आप _tox_ के साथ उपयोग कर रहे हैं। –

+0

अच्छा विचार! कार्यान्वयन 'subprocess' के साथ एक हवा था। इसे एक उत्तर दें और मैं इसे स्वीकार करूंगा। –

+0

कार्यान्वयन नोट: 'contest.py' में' pytest_configure' और 'pytest_unconfigure' spawn/terminate के लिए एक अच्छी जगह थी। –

उत्तर

2

यह वास्तव में tox के लिए एक कार्य नहीं है। मेरी सिफारिश यह है कि आप setup वास्तविक इकाई परीक्षण ढांचे (py.test, nose, unittests, ...) के कार्यों/विधियों में ऐसा करते हैं ...) आप tox के साथ उपयोग कर रहे हैं।

मूल पोस्टर की टिप्पणी:

pytest_configure और pytest_unconfigureconftest.py में अंडे/समाप्त करने के लिए एक अच्छी जगह था।

+0

pytest_configure/unconfigure इसके लिए सबसे अच्छा नहीं है क्योंकि वे वितरित परीक्षण (pytest-xdist प्लगइन) के साथ अच्छी तरह से काम नहीं करेंगे। Py.test 2.3 रिलीज ने इस समस्या को हल करने के लिए उन्नत फिक्स्चर एपीआई की शुरुआत की, सत्र-स्कोप्ड स्थिरता बनाने के लिए @ pytest.fixture (scope = 'session') के साथ स्थिरता को चिह्नित करें। – flub

1

मेरा सुझाव है कि आप paver का उपयोग करें - http://paver.github.com/paver/ - अप उत्पन्न करने और अपने memcached सर्वर या किसी भी अतिरिक्त "विविध सिस्टम व्यवस्थापक कार्य" है कि आप की जरूरत के बंद करने के लिए द्वारा setup.py के निष्पादन के दौरान करें।

+0

लेकिन फिर आप आसानी से टोक्स के बिना परीक्षण नहीं चला सकते हैं। अंतर्निहित परीक्षण धावक के साथ ऐसा करना मुझे लगता है कि बेहतर लगता है। – hpk42

6

अपने fixture mechanism का उपयोग करके py.test के साथ इसे करने का सबसे अच्छा तरीका फ़्लब की टिप्पणी पर विस्तृत करने के लिए। इस सामग्री के साथ एक 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" झंडा मतलब है कि यह स्थिरता परीक्षण से किसी भी संदर्भ की आवश्यकता के बिना प्रत्येक परीक्षा रन के लिए सक्रिय हो जाएगा। अभ्यास में, हालांकि, आप अपने परीक्षणों के लिए उपलब्ध उपप्रोसेसर में कनेक्शन विवरण बनाना चाहते हैं ताकि आपको जादू पोर्ट नंबरों के साथ काम करने की आवश्यकता न हो। आप तब "ऑटहाउस" का उपयोग नहीं करेंगे बल्कि मेमकैच से कनेक्ट करने के लिए एक स्थिरता वस्तु वापस कर देंगे, अच्छी तरह से एक स्थान (फ़िक्स्चर फ़ंक्शन) में टेस्ट कॉन्फ़िगरेशन को encapsulating। कई और उदाहरणों के लिए दस्तावेज़ देखें।

+0

मेरे शुरुआती कार्यान्वयन से काफी अच्छा है। मैं उसके लिए जाऊंगा। –

संबंधित मुद्दे