XUnit चौखटे समानांतर में परीक्षण चलाने की अनुमति क्यों नहीं देते?


15

क्या आप किसी भी xUnit ढांचे के बारे में जानते हैं जो आज के मशीन में कई कोर का उपयोग करने के लिए, समानांतर में परीक्षण चलाने की अनुमति देता है?

यदि उनमें से कोई भी (या ऐसा कुछ) ऐसा नहीं करता है, तो शायद एक कारण है ... क्या यह है कि परीक्षण आमतौर पर इतनी जल्दी होते हैं कि लोग बस उन्हें पक्षाघात करने की आवश्यकता महसूस नहीं करते हैं?

क्या कुछ गहरा है जो कई थ्रेड्स पर परीक्षणों को वितरित करने (कम से कम कुछ) का प्रस्ताव रखता है?


यूनिट परीक्षण निश्चित रूप से धीमा है। यहां तक ​​कि अगर प्रत्येक परीक्षण अपने आप में तेज़ है, तो वे लोगों को कम से कम परीक्षण के मामलों के लाखों लोगों के रूप में संक्षिप्त करेंगे।
पेसियर

जवाबों:


6

एनयूनिट 2.5 बंडल्ड पीएनयूनाइट जो समानांतर में परीक्षणों को चलाने की अनुमति देता है।

इस रिलीज़ में pNUnit, वितरित समानांतर परीक्षणों के लिए एक विस्तारित NUnit धावक शामिल है। प्लास्टिक SCM के परीक्षण में उपयोग के लिए कोडन सॉफ्टवेयर पर pNUnit प्रोग्राम विकसित किया गया था और NUnit में योगदान दिया गया है। PNUnit का उपयोग करने के बारे में अधिक जानकारी के लिए pNUnit साइट देखें।

JUnit पक्ष में समानांतर-जूनिट के साथ-साथ अमीनो भी है


तो अन्य रूपरेखाओं का एकमात्र कारण 'अभी तक लागू नहीं' होगा?
जेवियर नोडेट

1
@Xavier हाँ; यह एक उचित बयान है।
एरॉन मैकिवर

10

आपके प्रश्न के दूसरे भाग का उत्तर देने के लिए: क्या कुछ और गहरा है जो कई थ्रेड्स पर परीक्षणों को वितरित करने (कम से कम कुछ) का प्रस्ताव रखता है?

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

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

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


+1 यह अपवादित उत्तर होना चाहिए क्योंकि यह वास्तव में क्यों उत्तर देता है।
ओलिवर वीलर

4

यदि परीक्षणों में डेटाबेस को सेटअप और क्वेरी करने की आवश्यकता होती है, तो समानांतर में चलने वाले परीक्षण एक-दूसरे के साथ तब तक हस्तक्षेप करते हैं जब तक कि समानांतर में चलने वाले प्रत्येक परीक्षण के लिए एक अलग डेटाबेस न हो।


परीक्षण प्लेटफॉर्म (xUnit) की देखभाल के लिए नहीं है; यह एक कार्यान्वयन विवरण है।
एरॉन मैकिवर 20

और यूनिट टेस्टिंग फ्रेमवर्क में लिखे गए सभी टेस्ट यूनिट टेस्ट नहीं होते हैं, ठीक उसी तरह जैसे डेटाबेस को एक्सेस करने वाला वास्तव में एक यूनिट टेस्ट नहीं है, एक इंटीग्रेशन टेस्ट की तरह।
c_maker

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

2

हालांकि JUnit प्रति se इसे अनुमति नहीं दे सकता है (मैं हालांकि इसके नवीनतम संस्करणों से पूरी तरह परिचित नहीं हूं), मावेन विथ इट्स अचुरेअर प्लगइन में समानांतर में परीक्षण चलाने का विकल्प है। मैंने इसे अभी तक कोशिश नहीं की है।

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


0

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

मल्टी प्रोसेसर पर मल्टी-थ्रेडिंग करने की तकनीक मल्टी प्रोसेसर पीसी के आगमन के साथ बेहतर हो रही है। हालांकि, व्यापक उपयोग में होने से पहले उन्हें समय लगेगा।

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

दूसरे दृष्टिकोण से, कुछ चीजों को समानांतर में चलाने की जरूरत नहीं है। यह प्रक्रिया पर्याप्त रूप से तेजी से चलती है, मल्टी-थ्रेडिंग को लागू करने के अलावा अन्य चीजों पर ध्यान केंद्रित करना बेहतर हो सकता है।


0

MBUnit कुछ विधानसभा स्तर की विशेषताओं को निर्दिष्ट करके समानांतर रूप से परीक्षण चलाने में सक्षम है।

[assembly: DegreeOfParallelism(6)]
[assembly: Parallelizable(TestScope.All)]

मैं कुछ समय के लिए समानांतर में सेलेनियम परीक्षण चलाने के लिए उस परियोजना का उपयोग कर रहा हूं। दुर्भाग्य से परियोजना अब बहुत ज्यादा जीवित नहीं है।

xUnit 2.0 को समानांतर इकाई परीक्षण का भी समर्थन करना चाहिए लेकिन मैंने अभी तक इसकी कोशिश नहीं की है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.