2013-05-07 3 views
24

py.test तेजी लाने के लिए वहाँ py.test के बार-बार निष्पादन में तेजी लाने के लिए कुछ रास्ता नहीं है? ऐसा लगता है कि परीक्षणों को इकट्ठा करने में काफी समय लगता है, भले ही मैं कमांड लाइन पर कौन सी फाइल निष्पादित करता हूं। मुझे पता है कि यह डिस्क की गति समस्या नहीं है या तो सभी .py फ़ाइलों में चल रहे pyflakes बहुत तेज है।कैसे

+1

क्या आप सुनिश्चित हैं कि "संग्रह" चरण धीमा है? कृपया, '--collectonly' के साथ py.test चलाने का प्रयास करें। – alecxe

+1

हां, यह संग्रह धीमा है। मैं संग्रह गणना 0 पर शुरू कर सकता हूं, फिर 2 पर जा सकता हूं, फिर 7. मैंने इसे फिर से '--collectonly' के साथ सत्यापित किया। पोस्ट संग्रह निष्पादन लगभग तत्काल है। –

+1

मेरे पास 400 से अधिक परीक्षणों और संग्रह चरण के साथ एक परियोजना है जो बहुत तेज़ है। इसके अतिरिक्त मेरे पास conftest.py है जो बहुत सारे जादू को जोड़ता है, बहुत से 'पैरामीट्रिज', फिक्स्चर, और 'pytest_generate_tests' जो धीमे इकट्ठा करते हैं, इस संग्रह के बावजूद मेरे मामले में तेज़ है। जांचें कि आपके पास अपना कोड नहीं है जो कि सबसे पुराने संग्रह चरण से बातचीत करता है और इसे धीमा कर देता है। यदि नहीं, तो आप यह देखने के लिए कि कौन सा कोड धीमा है, आप लाइन प्रोफाइलर जैसे प्रोफाइलर चला सकते हैं। – spinus

उत्तर

9

pytest.ini या tox.ini में norecursedirs विकल्प का उपयोग करके आप अपनी कार्यशील निर्देशिका में अन्य फाइलों के आधार पर बहुत से संग्रह समय बचा सकते हैं। मेरा संग्रह समय लगभग 300 परीक्षणों के सूट के लिए आधा हो गया है जब मेरे पास यह जगह है (0.34 बनाम 0.64 एस)।

आप पहले से ही tox उपयोग कर रहे हैं की तरह मैं कर रहा हूँ, तुम बस अपनी tox.ini में निम्नलिखित जोड़ने की जरूरत:

[pytest] 
norecursedirs = docs *.egg-info .git appdir .tox 

तुम भी एक नि: शुल्क से चली आ रही pytest.ini फ़ाइल में जोड़ सकते हैं।

pytest प्रलेखन more details on py.test configuration files है।

+0

इसके अतिरिक्त (या इसके बजाय) आपको 'testpaths' को कॉन्फ़िगर करना चाहिए, यानी' testpaths = src/test'। फिर आपको '.git', '.tox' आदि को छोड़ने की आवश्यकता नहीं है – blueyed

4

मैं एक ही समस्या है जहाँ मैं अपनी परियोजना के रूट पर py.test बुला रहा था हो रही थी और मेरे परीक्षण तीन उपनिर्देशिका गिरावट दर्ज की गई। संग्रह वास्तविक परीक्षण निष्पादन के 0.4 सेकंड से पहले 6-7 सेकंड ले रहा था।

मेरे समाधान शुरू में परीक्षण के सापेक्ष पथ के साथ py.test कॉल करने के लिए किया गया था:

py.test src/www/tests/ 

वह भी अपने संग्रह को गति कर रही है, आप addopts के अंत तक परीक्षण के सापेक्ष पथ जोड़ सकते हैं अपने pytest.ini में स्थापित करने - उदाहरण के लिए:

[pytest] 
addopts = --doctest-glob='test_*.md' -x src/www/tests/ 

यह एक दूसरे के बारे में करने के लिए नीचे गिरा संग्रह + निष्पादन समय और जैसा कि मैंने पहले था मैं अभी भी सिर्फ py.test कह सकते हैं।

+1

' testpaths', i.e.' testpaths = src/www/test' का उपयोग करके इसे कॉन्फ़िगर करने का एक बेहतर तरीका है। – blueyed

1
आप py.test रन parallelize कर सकते हैं xdist साथ

। यह रिमोट मशीनों को परीक्षण भेजने की इजाजत देता है। निर्भर करता अपने सेटअप पर इसे काफ़ी :)

2

speedup कर सकते हैं विशेष मामला है जहाँ आप cygwin के अजगर के तहत चल रहे हैं, इसकी यूनिक्स शैली फ़ाइल से निपटने धीमी है। उस विशेष स्थिति में चीजों को गति देने के लिए pytest.py test very slow startup in cygwin देखें।

0

आप कुछ एंटीवायरस सॉफ्टवेयर चला रहे हैं, इसे बंद करके देखें। मुझे यह वही समस्या थी। परीक्षण एकत्रित अविश्वसनीय रूप से धीमा चला गया। यह मेरा एंटीवायरस सॉफ़्टवेयर (अवास्ट) साबित हुआ जो समस्या पैदा कर रहा था। जब मैंने एंटीवायरस सॉफ़्टवेयर को अक्षम कर दिया, तो परीक्षण संग्रह लगभग पांच गुना तेजी से चला। मैंने कई बार परीक्षण किया, एंटीवायरस चालू और बंद कर दिया, इसलिए मुझे कोई संदेह नहीं है कि मेरे मामले में कारण था।