हमारे निर्माण समय को प्रबंधित/कम करने के लिए, मैं यह जानना चाहता हूं कि कौन से यूनिट परीक्षण सबसे अधिक समय ले रहे हैं - maven-surefire-plugin
का उपयोग करते हुए समांतर परीक्षण वातावरण में।समानांतर मोड में maven-surefire-plugin का उपयोग करते समय धीमी इकाई परीक्षणों की पहचान कैसे करें?
हम यूनिट परीक्षणों के लिए JUnit
(4.10) का उपयोग कर रहे हैं। हम maven
(2.2.1 का उपयोग करते हैं - हमारे द्वारा उपयोग किए जाने वाले कुछ प्लगइन्स अभी तक मैवेन का समर्थन नहीं करते हैं 3) हमारे प्राथमिक निर्माण उपकरण के रूप में, और maven-surefire-plugin
(2.19) यूनिट परीक्षण चलाने के लिए।
हम प्रयोग कर रहे हैं parallel mode, जहां दोनों अलग-अलग तरीकों समानांतर में चलाए जा रहे हैं समानांतर और इकाई परीक्षण कक्षाओं में चलाए जा रहे हैं में maven-surefire-plugin
- यह बहुत महत्वपूर्ण है, के रूप में यह काफी इकाई परीक्षण समय का निर्माण कम कर देता है। maven-surefire-plugin
.pom
में कॉन्फ़िगर किया गया है इस प्रकार है:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<argLine>-Xmx2G -XX:MaxPermSize=1G -XX:-UseSplitVerifier</argLine>
<failIfNoTests>false</failIfNoTests>
<parallel>classesAndMethods</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
</configuration>
</plugin>
हालांकि, इस के निहितार्थ यह है कि सांत्वना उत्पादन में, समय प्रत्येक JUnit परीक्षण वर्ग के लिए गुजरे है में सभी तरीकों के लिए कुल समय है कक्षा।
उदाहरण के लिए, यदि एक परीक्षण कक्षा 10 इकाई परीक्षण तरीकों, जिनमें से प्रत्येक ले लिया चलाने के लिए 1 सेकंड था, तो परीक्षण वर्ग के बारे में 1 सेकंड चलाने के लिए (प्रत्येक विधि समानांतर में चलाया जा रहा) ले जाएगा, लेकिन उत्पादन होगा कुछ हो जैसे:
com.package.QuickParallelTest रनिंग की गई जांच: 10, विफलताओं: 0, त्रुटियाँ: 0, छोड़ा: 0, बीता समय: 10.0 सेकंड - com.package.QuickParallelTest
में
इससे कंसोल आउटपुट में 10 यूनिट परीक्षण विधियों के साथ एक अन्य टेस्ट क्लास में अंतर करना मुश्किल हो जाता है, wh आईआईसी 9 लगभग तुरंत चलती है और 1 को चलाने के लिए लगभग 10 सेकंड लगते हैं। इस मामले में, परीक्षण वर्ग (एक धीमी गति से परीक्षा पद्धति की वजह से) को चलाने के लिए के बारे में 10 सेकंड का समय होगा, लेकिन maven-surefire-plugin
सांत्वना उत्पादन प्रभावी ढंग से ही होगा:
com.package.SlowParallelTest रनिंग चलाने टेस्ट: 10, विफलताओं: 0, त्रुटियाँ: 0, छोड़ा: 0, बीता समय: 10.0 सेकंड - com.package.SlowParallelTest में
आदर्श रूप में, मैं चाहूँगा समय इंगित करने के लिए कितनी देर तक परीक्षण वर्ग के लिए ले लिया गुजरे रन (समानांतर में), विधियों को अलग से चलाने के लिए कुल समय नहीं लिया जाता है (जैसे एकल-थ्रेडेड)।
तो, मेरे सवाल (रों) है/हैं:
- वहाँ Maven-अचूक-प्लगइन सेटिंग है कि मैं, याद आ रही है, ताकि प्रिंट सारांश तरीकों के लिए कुल के बजाय प्रति कक्षा लिया समय दिखाना चाहते है ?
- क्या यह
maven-surefire-plugin
में ज्ञात "बग" (या "सुविधा") है? (मैंने SureFire JIRA की जांच की है, लेकिन इस तरह कुछ भी नहीं मिला।) - क्या मेरे पास यह जानने का एक वैकल्पिक तरीका है कि कौन से परीक्षण लंबे समय से ले रहे हैं और इसलिए अनुकूलन के लिए प्रमुख हैं।
संपादित करें:
मैं कुछ अतिरिक्त विन्यास सेटिंग्स के साथ खेलने की कोशिश की है।उत्सुकता से, .pom
में कॉन्फ़िगरेशन में निम्न को जोड़ने से कंसोल आउटपुट में समय बीतने के लिए टेस्ट क्लास चलाने में समय लगता है - हालांकि, यह (मेरे दिमाग में) काउंटर-अंतर्ज्ञानी है, क्योंकि ये सेटिंग्स हैं default settings:
<configuration>
...
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
</configuration>
भविष्य के पाठकों के लिए एक टिप्पणी के रूप में - एक संदर्भ संदर्भ में, कॉन्फ़िगरेशन सेटिंग false printSummary> सहित, जिसका मतलब है कि कंसोल पर कोई प्रदर्शन डेटा मुद्रित नहीं होता है, बिल्ड समय को बेहतर बना सकता है - फिर आप टिप्पणी कर सकते हैं बिल्डिंग प्रदर्शन प्रोफाइलिंग करते समय सेटिंग। –
amaidment