2010-11-03 18 views
10

का उपयोग चलाने के लिए एक ही परीक्षण समसामयिक रूप से (एकाधिक प्रक्रियाओं में) और परिणाम को एक ही पास/असफल परिणाम में एकत्रित करना संभव है?क्या एक साथ कई बार एक परीक्षण चलाने के लिए नाक का उपयोग करना संभव है?

संसाधन लॉकिंग प्रभावित नहीं होने के लिए हमें एक ही परीक्षण को कई बार चलाने की आवश्यकता है। अगर नाक ऐसा नहीं कर सकता है, तो क्या यह प्राप्त करने के लिए अनुसरण करने के लिए एक विशिष्ट परीक्षण/डिजाइन पैटर्न है?

+1

में टिप्पणी देखें तो हां, एक साथ एक ही परीक्षण चलाने के लिए संभव है। क्या आप एक ही पास में समेकित वर्णन कर सकते हैं/अधिक विस्तार से असफल हो सकते हैं? क्या आप एक ही परीक्षण को 'कई बार चलाएं' के रूप में चिह्नित करना चाहते हैं और दूसरों को एक ही सूट में 'एक ही समय चलाएं' के रूप में चिह्नित करना चाहते हैं? यदि ऐसा हो तो आसान होना चाहिए। – TryPyPy

उत्तर

9

यह संभव है run tests concurrently with nose रहे हैं:

nose.plugin.multiprocess प्लगइन का उपयोग करके आप कार्यकर्ता प्रक्रियाओं की एक विन्यास संख्या में एक परीक्षण रन parallelize कर सकते हैं। हालांकि यह सीपीयू-बाध्य परीक्षण रनों को तेज कर सकता है, यह मुख्य रूप से आईओ-बाध्य परीक्षणों के लिए उपयोगी है जो खर्च करते हैं, डेटा के लिए प्रतीक्षा करने का अधिकांश समय किसी और जगह से आता है और समांतरता से लाभ प्राप्त कर सकता है।

मैंने प्लगइन को समानांतर में एक ही परीक्षण चलाने के लिए अनुकूलित किया है जैसा आप चाहते हैं। http://paste.pocoo.org/show/319470/ से डाउनलोड करें और nose/plugins/repeat.py के रूप में सहेजें। फिर, nose/plugins/builtin.py में, ('nose.plugins.repeat', 'RepeatMultiProcess'), से builtins पर लाइन जोड़ें। इस तरह कॉल करें:

c:\python27\python nose-1.0.0\selftest.py --repeat-processes=2 --repeat-times=3 test2.py 

नोट: सेटअप/टियरडाउन समर्थन टूटा जा सकता है। यदि ऐसा है, तो फिक्स सरल है,

+0

आप गलत समझते हैं - मुझे एक एकल परीक्षण * कई बार एक साथ चलाने की आवश्यकता है। –

+0

मुझे गलत समझ नहीं आया, यह "कई प्रक्रियाओं में" चलाने के लिए अंतर्निहित तरीका है। मैं समानांतर में एक ही परीक्षण चलाने के लिए इसका उपयोग करने का तरीका समझने की कोशिश कर रहा हूं। – TryPyPy

+0

वास्तव में मेरा हैक काम करता है, लेकिन किसी भी तरह एक परीक्षण हमेशा एक बार चल रहा है। डिबगिंग ... – TryPyPy

11

ऐसा लगता है कि आप परीक्षण परिभाषा में कुछ चाहते हैं क्योंकि आप परिणामों के एकत्रीकरण पर जोर देना चाहते हैं। मैं परीक्षण में multiprocessing का उपयोग करने पर एक नज़र डालेंगे। समानांतर में अपना कोड निष्पादित करने के लिए पूल बनाएं। आप परिणामों को कुल करने के लिए Queue का उपयोग कर सकते हैं।

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