में पाइथन (या पुनः लोड मॉड्यूल) को पुनरारंभ करें मेरे पास एक (python3) पैकेज है जिसमें init()
एड (शायद सबसे अच्छा डिज़ाइन नहीं है, लेकिन फिर से लिखना एक विकल्प नहीं है) के आधार पर पूरी तरह से अलग व्यवहार है। मॉड्यूल केवल init()
एड हो सकता है, दूसरी बार एक त्रुटि देता है। मैं py.test का उपयोग कर इस पैकेज (दोनों व्यवहार) का परीक्षण करना चाहता हूं।py.test परीक्षण
नोट: पैकेज की प्रकृति दो व्यवहारों को पारस्परिक रूप से अनन्य बनाती है, दोनों एकवचन कार्यक्रम में कभी भी नहीं चाहते हैं।
मेरे पास मेरी परीक्षण निर्देशिका में serveral test_xxx.py
मॉड्यूल हैं। प्रत्येक मॉड्यूल पैकेज में जरूरतों को पूरा करेगा (फिक्स्चर का उपयोग कर)। चूंकि py.test
एक बार पाइथन दुभाषिया शुरू करता है, इसलिए एक py.test रन में सभी टेस्ट-मॉड्यूल चलाना विफल रहता है।
दूसरे init()
को अनुमति देने के लिए पैकेज बंदर-पैचिंग ऐसा कुछ नहीं है जो मैं करना चाहता हूं, क्योंकि आंतरिक कैशिंग आदि है जिसके परिणामस्वरूप अस्पष्ट व्यवहार हो सकता है।
- यह संभव एक अलग अजगर प्रक्रिया में प्रत्येक परीक्षा मॉड्यूल (जिससे एक और परीक्षण मॉड्यूल में inits से प्रभावित नहीं किया जा रहा) को चलाने के लिए
- वहाँ एक रास्ता मज़बूती से एक पैकेज को फिर से लोड करने के लिए है py.test बताने के लिए (है सभी उप-निर्भरताओं, आदि सहित)?
- क्या कोई और समाधान है (मैं आयात करने के बारे में सोच रहा हूं और फिर एक स्थिरता में पैकेज को महत्वहीन नहीं कर रहा हूं, लेकिन यह अत्यधिक लगता है)?
from imp import reload import some_lib #do something reload(some_lib)
इसके अलावा, एक नई प्रक्रिया में प्रत्येक परीक्षा शुरू करने व्यवहार्य है, लेकिन multiprocessed कोड तरह की दर्दनाक है:
मैं इसके साथ कोई अनुभव नहीं है, लेकिन आप का उपयोग करने के/कई subprocesses शुरू करने और चीजें हैं जो तरीके से करना इस प्लगइन अनुकूलन सक्षम हो सकता है: https://pytest.org/latest/xdist। html # running-test-in-a-python-subprocess –
यदि एक फ़ाइल ('pytext text/text_xyz.py) पर pytest चलाने के लिए संभव है, तो आप test_xyz फ़ाइलों को खोजने के लिए एक प्रोग्राम लिख सकते हैं और प्रत्येक को चला सकते हैं subprocess मॉड्यूल के साथ अलग प्रक्रिया। यही कारण है कि शिमोन द्वारा संदर्भित प्लगइन करना चाहिए। –
धन्यवाद। 'Pytest-xdist' पर देखा गया, दुर्भाग्य से प्रति मॉड्यूल एक नया उपप्रोसेस शुरू नहीं करता है। दरअसल, मेरे पास 2 निर्देशिकाओं में टेस्ट-मॉड्यूल हैं: एक जो इनटिंग का एक तरीका उपयोग करता है, दूसरा दूसरे का उपयोग करता है। फिर मैं प्रति निर्देशिका एक बार pytest चलाते हैं। हालांकि यह दुर्भाग्यपूर्ण है कि मुझे यह सुनिश्चित करने के लिए एक अतिरिक्त स्क्रिप्ट चाहिए कि व्यक्तिगत मूल्यों की वापसी मूल्य और परीक्षण रिपोर्ट संयुक्त हो जाएं। – Claude