2015-12-30 10 views
6

के साथ एकीकरण परीक्षण के लिए कैश नहीं किया गया है जब एकीकरण परीक्षण आईडीई एप्लिकेशंस कॉन्टेक्स्ट से केवल एक बार लोड होता है और फिर परीक्षणों के बीच साझा किया जाता है और यह अपेक्षित के रूप में काम करता है। लेकिन प्रत्येक परीक्षण के लिए mvn clean install नया एप्लिकेशंस कॉन्टेक्स्ट निष्पादित किया गया। Spring doc अनुसार मैं Maven-फेल सेफ-प्लगइन कॉन्फ़िगर कर दिया है एक कांटास्प्रिंग एप्लिकेशन कॉन्टेक्स्ट मैवेन

<artifactId>maven-failsafe-plugin</artifactId> 
<version>2.12.4</version> 
<configuration> 
    <forkCount>1</forkCount> 
    <reuseForks>true</reuseForks> 
... 

उपयोग करने के लिए ApplicationContext followin एनोटेशन इस्तेमाल किया कैश करने के लिए:

@ContextConfiguration(classes = TestConfig.class) 

जब Maven के साथ आवेदन का निर्माण क्यों संदर्भ साझा नहीं किया? असल में आईटी परीक्षणों को गति देने का कोई और तरीका है? धन्यवाद।

UPDATED:

यह multimodule Maven परियोजना है। Accordig Spring IT caching doc

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

तो maven-failsafe-plugin 2.14 के लिए इस config के बराबर होती है forkMode = एक बार

+0

क्या आप अपनी टेस्ट कॉन्फ़िगरेशन और समग्र संरचना –

+0

@AliDehghani के बारे में अधिक जानकारी जोड़ सकते हैं वर्तमान में मैं एकल मॉड्यूल में परीक्षण चलाता हूं। जब स्थानीय एनवी में यह दृश्यवर्म के साथ जांच कर सकता है कि कभी साझा संदर्भ नहीं है लेकिन यह 2000+ धागे (जबकि फोर्कमोड = लगभग 20 बार) बनाता है, तो कई परीक्षण विफलताओं – njjnex

+0

क्या आपने 'threadCount = 1' सेट करने का प्रयास किया था? –

उत्तर

2

आप specifiyng संदर्भ स्थान वर्गों के बजाय साथ की कोशिश कर सकते हैं: locations विशेषता इसलिए यदि द्वारा

@ContextConfiguration(locations = "classpath:test-context.xml") 

स्प्रिंग कैश आवेदन संदर्भों एक ही locations दूसरी बार दिखाई देता है, वसंत एक नया निर्माण करने के बजाय समान संदर्भ का उपयोग करता है।

यह यहाँ से है: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html#testing-ctx-management

इसके अलावा आप यहां इकाई परीक्षण को तेज करने के बारे में पढ़ सकते हैं: http://www.nurkiewicz.com/2010/12/speeding-up-spring-integration-tests.html

अद्यतन

अपनी परियोजना के लिए एक बहु मॉड्यूल Maven परियोजना है? तदनुसार डॉक्स:

डिफ़ॉल्ट सेटिंग, forkCount = 1/reuseForks = सच है जिसका अर्थ है अचूक एक नया JVM प्रक्रिया बनाता है कि एक Maven मॉड्यूल में सभी परीक्षणों पर अमल करने।

+0

कक्षाओं का भी उपयोग किया जाता है http://docs.spring.io/spring-framework/docs/4.1.x/spring-framework-reference/html/testing.html#testcontext-ctx- प्रबंधन -कैचिंग – njjnex

+0

एकल मॉड्यूल में परीक्षण भी संदर्भ साझा नहीं कर रहे हैं – njjnex

1

कुछ बातें आप इस पर गौर कर सकते हैं: अचूक प्लगइन का

  • संस्करण और समानांतर निष्पादन विन्यास। Surefire Fork Options के अनुसार - फोर्ककाउंट और reuseForks Surefire संस्करण 2.14 या उसके बाद के पैरामीटर के पैरामीटर हैं। ओपी राज्यों में पॉम फ़ाइल स्निपेट संस्करण 2.12.4
  • आपके कॉन्फ़िगरेशन में कुछ ऐसा लगता है जो अभी भी समानांतर निष्पादन का कारण बनता है। ऐसे मामले में जहां 20 धागे लॉन्च किए जाते हैं, मैं उम्मीद करता हूं कि 20 आवेदन संदर्भ बनाए और कैश किए गए हैं, ताकि एक थ्रेड द्वारा निष्पादित सभी परीक्षण (पुन:) इसके लिए बनाए गए अनुप्रयोग संदर्भ का उपयोग कर रहे हों। यदि ऐसा है, तो परीक्षणों को चलने वाले कई धागे के संदर्भ में व्यवहार की उम्मीद है - प्रश्न
  • सरेफायर के विभिन्न संस्करणों के साथ प्रयोग करना चाह सकता है, समानांतर निष्पादन के व्यवहार के साथ प्रयोग करना चाहते हैं भिन्न होते हैं। मैं अचूक 2.16 का उपयोग किया है अन्य परियोजनाओं में और forking से संबंधित किसी भी कस्टम विन्यास के बिना, सभी परीक्षणों एकल थ्रेड क्रियान्वित कर रहे हैं (डिफ़ॉल्ट विन्यास के रूप में कहा गया है यह चाहिए)

मैं जानता हूँ कि यह नहीं बल्कि करने के लिए अधिक चीजों की एक सूची है ओपी के एक निश्चित उत्तर से प्रयास करें, लेकिन मैंने उम्मीद में पोस्ट किया है कि यह सहायक हो सकता है

+0

आपके उत्तर के लिए धन्यवाद, प्लगइन संस्करण ठीक है, असल में यह सच है कि थ्रेड गिनती संख्या एपकॉन्टेक्स कैश की संख्या के बराबर होती है, और एक प्रश्न अभी भी बना रहता है - क्यों जब AppContext कैश किया गया और फोर्कमोड = कभी विज़ुअलव्यू नहीं दिखाता है कि 2000+ धागे क्यों बने और ऐसा क्यों होता है कि उस मामले में पैरों को कैसे प्रबंधित किया जाए? – njjnex

+0

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

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