2010-06-03 9 views
9

मैंने सोचा कि मुझे समझ में आया कि एमबीयूनीट के समानांतर परीक्षण निष्पादन कैसे काम करता है, लेकिन जो व्यवहार मैं देख रहा हूं वह मेरी अपेक्षा से काफी अलग है कि मुझे संदेह है कि मुझे कुछ याद आ रहा है!एमबीयूनीट [समानांतर] और डिग्रीग्रीफेल समानता कार्य कैसे करते हैं?

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

इसके लिए मैं AssemblyInfo.cs में निम्नलिखित डाल:

[assembly: DegreeOfParallelism(8)] 

[assembly: Parallelizable(TestScope.All)] 

मेरे समझ गया था कि विधानसभा विशेषताओं के इस संयोजन परीक्षण [Parallelizable] पर विचार किया जाएगा के सभी और कारण चाहिए, कि परीक्षण धावक निष्पादन के दौरान 8 धागे का उपयोग करना चाहिए। मेरे व्यक्तिगत परीक्षण [Test] विशेषता के साथ चिह्नित हैं, और कुछ भी नहीं। उनमें से कोई भी डेटा संचालित नहीं है।

हालांकि, जो मैं वास्तव में देखता हूं वह सबसे अधिक 5-6 धागे का उपयोग होता है, जिसका अर्थ है कि मेरे परीक्षण रनों की तुलना में अधिक समय लेना चाहिए।

क्या मुझे कुछ याद आ रही है? क्या मुझे यह सुनिश्चित करने के लिए कुछ और करने की ज़रूरत है कि मेरे सभी 8 धागे धावक द्वारा उपयोग किए जा रहे हैं?

एनबी। मैं जिस धावक का उपयोग करता हूं उसके बावजूद व्यवहार वही है। जीयूआई, कमांड लाइन और टीडी.Net धावक सभी ऊपर वर्णित जैसा व्यवहार करते हैं, फिर मुझे लगता है कि मुझे कुछ याद आया है।

संपादित करें: टिप्पणियों में बताया गया है कि, मैं एमबीयूनीट (अपडेट 2 बिल्ड 3 9 7) के v3.1 चला रहा हूं। documentation बताता है कि असेंबली स्तर [parallelizable] विशेषता उपलब्ध है, लेकिन यह अभी भी उपलब्ध नहीं होने के बावजूद ढांचे के v3.2 को संदर्भित करता प्रतीत होता है।

संपादित करें 2: आगे स्पष्ट करने के लिए, मेरी विधानसभा की संरचना इस प्रकार है:

assembly 
- namespace 
    - fixture 
     - tests (each carrying only the [Test] attribute) 
    - fixture 
     - tests (each carrying only the [Test] attribute) 
- namespace 
    - fixture 
     - tests (each carrying only the [Test] attribute) 
    - fixture 
     - tests (each carrying only the [Test] attribute) 
- namespace 
    - fixture 
     - tests (each carrying only the [Test] attribute) 
    - fixture 
     - tests (each carrying only the [Test] attribute) 

संपादित करें 3: ठीक है, मैं अब देखा है कि अगर मैं केवल कभी में एक स्थिरता चलाने एक समय, एक साथ चलने वाले परीक्षणों की अधिकतम संख्या हमेशा 8 होती है। जैसे ही मैं एकाधिक फिक्स्चर चुनता हूं, यह 5 या 6 तक गिर जाता है। यदि मैं दो फिक्स्चर की सामग्री लेता हूं (वर्तमान में उनमें प्रत्येक 12 परीक्षण होते हैं) और उन्हें छोड़ दें वही स्थिरता (उस एक स्थिरता में कुल 24 परीक्षणों के लिए) कि स्थिरता हमेशा 8 परीक्षणों को एक साथ चलाएगी।

ऐसा लगता है कि यह व्यक्तिगत परीक्षणों में कोई मुद्दा नहीं है, बल्कि असेंबली स्तर के गुण कैसे स्थिरता के लिए नीचे गिरते हैं, या परीक्षण धावक उन गुणों का उपभोग कैसे करता है।

इसके अतिरिक्त, मैंने यह भी देखा कि (दो फिक्स्चर चलाते समय) कि एक बार दो फिक्स्चर में से एक को पूरी तरह से निष्पादित किया गया था, तो धावक केवल एक ही स्थिरता को चलाने के लिए एक साथ परीक्षणों को निष्पादित करना शुरू कर देता है। मेरे लिए अभी, पहली स्थिरता को निष्पादित किया जाता है जब दूसरे स्थिरता में चलाने के लिए 7 परीक्षण शेष होते हैं। जैसे ही ऐसा होता है, परीक्षणों की संख्या पिछले 5 या 6 से अधिकतम 7 तक उपलब्ध हो जाती है।

उत्तर

6

v3.0 के release note के अनुसार।6:

MbUnit आपको अपने बहु-कोर CPU से अधिक लाभ प्राप्त करने में सहायता करता है। किसी भी परीक्षण [Parallelizable] को चिह्नित करें और इसे उसी समानता में अन्य समांतर परीक्षणों के साथ समानांतर में चलाने की अनुमति दी जाएगी।

फिक्स्चर को समानांतर चिह्नित किया जा सकता है ताकि उन्हें अन्य समांतर फिक्स्चर के साथ समानांतर में चलाने में सक्षम बनाया जा सके।

alt text

कृपया ध्यान दें कि आप एक दृढ़ भीतर सभी परीक्षणों में चलाने योग्य पर विचार किया जा करना चाहते हैं तो आप अब भी उनमें से प्रत्येक को [Parallelizable] जोड़ने की जरूरत है। (हम बाद में उपयोगकर्ता प्रतिक्रिया के आधार पर इसे स्थिरता या असेंबली स्तर पर सेट करने के लिए एक सुविधा जोड़ सकते हैं।)

यह भी ध्यान दें कि केवल एक परीक्षण या स्थिरता समानांतर चिह्नित है इसका मतलब यह नहीं है कि यह अन्य परीक्षणों के साथ समानांतर में चलाएगा विशेष। दक्षता के लिए, हम समांतरता की कॉन्फ़िगर की गई डिग्री के आधार पर सक्रिय परीक्षण धागे की संख्या को सीमित करते हैं। यदि आप एक दूसरे के साथ समानांतर में चलाने के लिए परीक्षण की एक विशिष्ट संख्या चाहते हैं, तो [ThreadedRepeat] का उपयोग करने पर विचार करें।

समांतरता सेटिंग की डिग्री अधिकतम संख्या में परीक्षणों को नियंत्रित करती है जो एमबीयूनीट एक दूसरे के साथ समानांतर में चलाने का प्रयास करेंगे। डिफ़ॉल्ट रूप से, समांतरता की डिग्री आपके पास मौजूद CPU की संख्या या कम से कम 2 होती है।

आप डिफ़ॉल्ट पसंद नहीं है, तो आप इस तरह विधानसभा स्तर पर समानांतरवाद की डिग्री ओवरराइड कर सकते हैं:

alt text

अगर यह मदद करता है मैं नहीं जानता। शायद जेफ अधिक जानकारी दे सकता है क्योंकि उसने उस सुविधा को लागू किया था।

+0

के लिए मुझे लगता है कि विधानसभा स्तर पर चलाने योग्य विशेषता पहले से ही 3.1 –

+0

3.1 के रूप में कार्यान्वित किया जाता है संस्करण मैं उपयोग कर रहा हूँ है।प्रलेखन (http://www.gallio.org/api/index.aspx) सुझाव देता है कि यह असेंबली स्तर पर किया जा सकता है। एकमात्र चीज जो मुझे नोटिस है वह है कि दस्तावेज संस्करण 3.2 का उल्लेख 3.1 नहीं है। लेकिन 3.2 अभी तक समाप्त नहीं हुआ है, जहां तक ​​मैं देख सकता हूं। – BenA

+0

जहां तक ​​मैं कह सकता हूं, आप समानांतर एपीआई का सही ढंग से उपयोग कर रहे हैं। ध्यान रखें कि DegreeOfParallelism केवल उपयोग करने के लिए अधिकतम थ्रेड निर्दिष्ट करता है। ऐसे कई कारण हैं जिनके लिए टेस्ट नेस्टिंग स्ट्रक्चर, टेस्ट ऑर्डरिंग और टेस्ट निर्भरता जैसे समानांतर में परीक्षण नहीं चल सकते हैं। [दोहराना] जैसे कुछ संरचनाएं समानांतर नहीं हैं [समानांतर]। इसी तरह डेटा-संचालित परीक्षणों की व्यक्तिगत पंक्तियों को एक-दूसरे के संबंध में समानांतर नहीं किया जाता है। (यह जोड़ने के लिए एक शानदार सुविधा होगी!) यदि आप [DegreeOfParallelism (32)] सेट करते हैं तो क्या आप औसत पर चल रहे अधिक समवर्ती परीक्षण देखते हैं? –

0

एक ही समस्या में पड़ गए, मेरे निष्कर्ष

  • [विधानसभा: में चलाने योग्य (...)] विधानसभा स्तर ओवरराइड पर चलाने योग्य गुण स्थिरता और एक समय में लेकिन एक दृढ़ पर रन एक होने स्थिरता परीक्षण में परिणाम होगा समांतर स्तर। लगता है कि समानांतर में अधिकतम 5-6 फिक्स्चर है।
  • [समानांतर स्तर पर समानांतर (टेस्टस्कोप.डिसेन्डेंट्स)] परिणामस्वरूप फिक्स्चर एक समय में चल रहा है लेकिन परीक्षण समानांतर में चल रहे हैं। ऐसा लगता है कि समानांतर में परीक्षणों पर कोई अधिकतम नहीं है।

अंततः स्थिरता स्तर पर असेंबली स्तर की बाधा के कारण, एकमात्र तरीका स्थिरता स्तर विशेषताओं का उपयोग करना है और समानांतर में चलने वाले फिक्स्चर परीक्षण हैं।

मैं इस मुद्दे को पाने के लिए कम स्थिरता और प्रति परीक्षण अधिक परीक्षण बनाने का सुझाव दूंगा। आप शायद प्रति असेंबली स्थिरता एकाधिक धावक लॉन्च कर सकते हैं।

शर्म यह मामला है।

-1

ओवरराइड एक समय में चलाने के लिए 5 से अधिक परीक्षणों के लिए काम नहीं करता है। हमारे पास एक समय में 25 स्क्रिप्ट निष्पादित करने के लिए उपलब्ध सॉस प्रयोगशालाओं पर 25 सिस्टम हैं, हम एक समय में केवल 20 निष्पादन के लिए डिग्रीग्रीफेल समानता पर सवारी करते हैं। [विधानसभा: DegreeOfParallelism (20)] - काम न करें Mbunit

+0

ओपी इसके साथ-साथ अन्य उत्तरों के साथ असहमत है –

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