2008-09-23 10 views
9

मैं चींटी के माध्यम से अपने जूनिट परीक्षण चला रहा हूं और वे आईडीई के माध्यम से काफी धीमी गति से चल रहे हैं। मेरे चींटी कॉल है:चींटी जूनिट परीक्षण आईडीई के माध्यम से चींटी के माध्यम से बहुत धीमी गति से चल रहे हैं - क्या देखना है?

<junit fork="yes" forkmode="once" printsummary="off"> 
     <classpath refid="test.classpath"/> 
     <formatter type="brief" usefile="false"/> 
     <batchtest todir="${test.results.dir}/xml"> 
      <formatter type="xml"/> 
      <fileset dir="src" includes="**/*Test.java" /> 
     </batchtest> 
    </junit> 

कि तत्क्षण मेरी आईडीई में (0.067s) के पास में चलाता है एक ही परीक्षण लेता 4.632s जब चींटी के माध्यम से चलाते हैं। अतीत में, मैं जूनिट फोर्क पैरामीटर का उपयोग कर इस तरह की परीक्षण समस्याओं को तेज करने में सक्षम हूं लेकिन यह इस मामले में मदद नहीं कर रहा है। इन परीक्षणों को तेज करने के लिए मैं किन संपत्तियों या पैरामीटर देख सकता हूं?

और जानकारी:

मैं आईडीई से सूचना समय का उपयोग कर रहा बनाम समय है कि JUnit कार्य आउटपुट। यह चींटी रन के अंत में रिपोर्ट की गई कुल योग नहीं है।

तो, विचित्र रूप से, इस समस्या ने स्वयं को हल कर लिया है। इस समस्या के कारण क्या हो सकता है? सिस्टम स्थानीय डिस्क पर चलता है ताकि समस्या न हो।

+1

फोर्क = हां एक एकल परीक्षण चलाने के लिए एक नई प्रक्रिया को बढ़ाकर प्रदर्शन को चोट नहीं पहुंचाएगा? परिणाम क्या होता है जब आप इसका उपयोग नहीं करते हैं? –

+1

फोर्कमोड = "एक बार" के साथ मैंने सोचा कि यह सभी अलग-अलग थ्रेड में सभी जूनिट परीक्षण चलाएगा। फोर्क = "नो और फोर्क =" हां "के बीच कोई भौतिक प्रतिकृति परिवर्तन नहीं है। –

+0

क्या आप चींटी की रिपोर्ट किए गए रन टाइम या जुनीट का उपयोग कर रहे हैं? चींटी बहुत अधिक काम कर रही है (यह निर्धारित करने के लिए कि कौन से परीक्षण चलाना है, शायद संकलन करना) आईडीई के माध्यम से परीक्षण। –

उत्तर

1

उस जानकारी के साथ बताना मुश्किल है। पहली बात यह है कि मैं परीक्षण परिणामों को देखता हूं और यह निर्धारित करता हूं कि सभी व्यक्तिगत परीक्षण समान रूप से धीमे चल रहे हैं या यदि इसे परीक्षण मामलों के एक निश्चित सबसेट में संकुचित किया जा सकता है।

+1

जार और जेवीएम समान हैं। ऐसा लगता है कि बोर्ड में किसी भी परीक्षण जो आईडीई में <1.0 सेकंड में चलता है, एंटी के माध्यम से 3.5-4.5 सेकेंड में चलता है। –

1

हो सकता है कि आपको लगता है कि देख रहे हैं (zero'th बात मैं करना होगा यकीन है कि मेरी चींटी कार्य ग्रहण के रूप में ही JVM उपयोग कर रहा है और उस classpath निर्भरता और आयातित जार वास्तव में और सही मायने में समान हैं बनाने है) क्योंकि ग्रहण वृद्धिशील संकलन करते हैं और चींटी नहीं करते हैं। क्या आप पुष्टि कर सकते हैं कि इस बार केवल परीक्षण लक्ष्य में बर्बाद हो गया है?

+0

मैं 'जूनिट' कार्य भी देख रहा हूं एक लंबा समय ले लो। यह निश्चित रूप से संकलन चरण नहीं है। जुनीट द्वारा दी गई वास्तविक समय कम है (उदाहरण: 'टेस्ट रन: 21, असफलता: 0, त्रुटियां: 0, समय बीत गया: 0.034 सेकंड'), इसलिए मुझे उम्मीद है कि यह समय है परीक्षण सूट के बीच बिताया गया है। इंटेलिजे में सभी परीक्षणों को चलाने में लगभग दो सेकंड लगते हैं, हालांकि उन्हें एंटी के 'जूनिट' कार्य के माध्यम से चलाना 20 सेकंड तक ले जाता है। –

4

यहां एक अंधेरा अनुमान है: -Xmx विकल्प सेट करने के लिए नेस्टेड <jvmarg> टैग का उपयोग कर फोर्कड वीएम में उपलब्ध अधिकतम ढेर आकार को बढ़ाने का प्रयास करें।

+0

मैं इसे सुझाव देने जा रहा था, साथ ही साथ चीप के ढेर के आकार को बढ़ाने के साथ खुद भी, साथ ही। –

0

रिकॉर्ड के लिए, मुझे मेरी समस्या मिली। हम इस परियोजना के लिए एक कोड obfuscator का उपयोग कर रहे हैं, और उस obfuscator के स्ट्रिंग एन्क्रिप्शन भाग "अधिकतम" पर सेट किया गया था। इससे किसी भी ऑपरेशन को धीमा कर दिया गया जहां तार मौजूद थे।

एक तेज मोड में स्ट्रिंग एन्क्रिप्शन को चालू करने से समस्या ठीक हो गई।

4

मैं अनुमान लगा रहा हूं क्योंकि आपकी एंटस्क्रिप्ट एक्सएमएल फाइलों के परिणाम आउटपुट कर रही है, जबकि आईडीई स्मृति में रख रहा है। फ़ाइल लिखने की तुलना में फ़ाइल लिखने में अधिक समय लगता है।

todir="${test.results.dir}/xml" 

< batchtest> कॉल है कि यह बताता है कि निर्देशिका में परिणाम रहना का हिस्सा है यही कारण है कि। ऐसा लगता है कि इसे छोड़ने से यह सिर्फ "वर्तमान निर्देशिका" में परिणाम छूने के लिए कहता है, जो भी हो। पहली नज़र में मैंने इसे बंद करने के लिए कुछ भी नहीं देखा।

0

कोशिश सेटिंग कांटा, forkmode और इन मूल्यों को धागे:

<junit fork="yes" forkmode="perTest" printsummary="off" threads="4"> 
    <classpath refid="test.classpath"/> 
    <formatter type="brief" usefile="false"/> 
    <batchtest todir="${test.results.dir}/xml"> 
     <formatter type="xml"/> 
     <fileset dir="src" includes="**/*Test.java" /> 
    </batchtest> 
</junit> 

भी देखें https://ant.apache.org/manual/Tasks/junit.html

0

मेरे लिए, <junit> तत्व के लिए forkmode="once" जोड़ने और <formatter> तत्व के लिए usefile="false" जोड़ने परीक्षण ज्यादा चलाने बनाता है और तेज। उन प्रारूपों को भी हटाएं जिनकी आपको आवश्यकता नहीं है।

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