2010-10-08 13 views
15

मैं वर्तमान में एक आवेदन पर यूनिट परीक्षण करने के लिए PHPUnit के संयोजन के साथ ज़ेंड फ्रेमवर्क का उपयोग कर रहा हूं। जब हडसन PHPUnit खोल कमांड निष्पादित करता है, तो अधिकतम कवरेज पीढ़ी के दौरान अधिकतम PHP मेमोरी सीमा तक पहुंच जाती है। वर्तमान में 334 दावों के साथ कुल 41 परीक्षण हैं।PHPUnit कोड कवरेज पीढ़ी मेमोरी थकावट

मैंने -d memory_limit=768M स्विच का उपयोग कर स्मृति_limit सेटिंग 768M पर उठाकर सफलतापूर्वक इस त्रुटि को समाप्त कर दिया है; हालांकि, मुझे चिंता है कि जटिलता की कुल संख्या परीक्षण/दावे के साथ बढ़ जाती है, इसलिए कोड कवरेज आंकड़ों के लिए HTML उत्पन्न करने के लिए मेरे पास पर्याप्त स्मृति नहीं होगी।

ओएस: CentOS 5.5
नियंत्रण कक्ष: WHM/cPanel
सीआई सर्वर: हडसन

/usr/local/bin/phpunit 
    --verbose 
    -d memory_limit=512M 
    --log-junit ../../build/logs/phpunit.xml 
    --coverage-clover ../../build/logs/coverage/clover.xml 
    --coverage-html ../../build/logs/coverage-html/ 

Fatal error: Allowed memory size of 536870912 bytes exhausted

अपने परिवर्तनों को प्रतिबद्ध होते हैं और दे हडसन बाकी का काम करने से पहले, मैं विकास के लिए विंडोज 7 का प्रयोग करें। W7 के भीतर एक ही कमांड चलाते समय स्मृति उपयोग 340MB से अधिक नहीं हुआ।

+0

क्या आपके सभी परीक्षण मामले एक कक्षा में हैं? – allnightgrocery

+0

नहीं, परीक्षण चार अलग-अलग फाइलों के बीच विभाजित हैं। ये परीक्षण अपेक्षाकृत सरल हैं, esp। हमने जो योजना बनाई है उसकी तुलना में। –

+0

:) आपके समाधान को पोस्ट करने के लिए धन्यवाद। मुझे आपके द्वारा सूचीबद्ध समस्या हो रही है और वास्तव में इसमें हैकिंग कर रही है। हर बार कुछ उठता है (लाइन 1999 में /pear/phpunit/framework/whatever.php में स्मृति समाप्त हो गई) मैं 'sudo vi /.../ whatever.php' टाइप करूंगा और एक पंक्ति 'set_ini (" memory_limit "" 1000M ")'। शायद सबसे अच्छा अभ्यास नहीं;) –

उत्तर

15

कोड कवरेज के भीतर शामिल फ़ाइलों की संख्या को कम करके, साथ ही समग्र स्मृति सीमा में वृद्धि PHP में, मैं मूल रूप से इस त्रुटि को मारने में सक्षम था। संपूर्ण ज़ेंड फ्रेमवर्क कोड कवरेज के भीतर शामिल किया जा रहा था, जो बहुत बड़ा है।

+0

यह आसान बनाने के लिए, मैंने यह सामान एक XML कॉन्फ़िगरेशन में रखा है, उदा। " MY_LIBRARY"। यदि आप इस phpunit.xml को नाम देते हैं और यह आपकी वर्तमान कार्यशील निर्देशिका में है, तो PHP इकाई स्वचालित रूप से इसे लागू करेगी। –

+0

यहां दो प्रासंगिक लिंक हैं: [कोड-कवरेज-विश्लेषण। समावेशन-बहिष्करण-फ़ाइलें] (http://www.phpunit.de/manual/current/en/code-coverage-analysis.html#code-coverage-analysis । अंतर्निहित-फाइलें), और [एक्सएमएल कॉन्फ़िगरेशन फ़ाइल कोड कवरेज श्वेतसूची फ़िल्टर वाक्यविन्यास] (http://www.phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.blacklist-witelist) – KajMagnus

+1

यह ध्यान रखना महत्वपूर्ण है कि शुरुआत में आप बिना किसी त्रुटि के परीक्षणों को निष्पादित करने के लिए phpunit रोक सकते हैं और दिखा सकते हैं "लौटा: 255" –

1

क्या आपके पास xdebug प्रोफाइलिंग सक्षम है, यदि ऐसा है तो इसे अक्षम करने का प्रयास करें। मैंने पहले इस समस्या का अनुभव किया है, और यह php में विस्तारित हो गया है (विशेष रूप से xdebug प्रोफाइलिंग और/या घुमावदार उत्तराधिकारी दर्शक)

+0

मैंने अभी जांच की, और मैं उम्मीद कर रहा था कि यह मुद्दा था, लेकिन प्रोफाइलिंग बंद कर दी गई है। आपके प्रतिक्रिया के लिए धन्येवाद। कोई अन्य विचार? –

+0

कोडबेस को जानने के बिना बताना मुश्किल है। मैं सिर्फ लाल झंडे के लिए नजर रखूंगा (उदाहरण के लिए संपूर्ण __autoloading, स्मृति में कैशिंग सामग्री, आदि) जो आम तौर पर एक समस्या नहीं है, लेकिन उच्च संख्या में तत्काल आदि के कारण परीक्षण के दौरान मुद्दों का कारण बन सकता है। इसके अलावा आंसू का लाभ उठाएं () अगर संभव हो तो। –

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