2011-11-30 11 views
8

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

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

इस समस्या से बचने या ठीक करने के कुछ तरीके क्या हैं? एक जोड़े है कि मेरे दिमाग में आया था:

  • विफलताओं की एक निश्चित संख्या को स्वीकार करें (एक बुरा विचार की तरह लगता है)
  • को पुन: चलाएं परीक्षण विफलताओं?

उत्तर

9

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

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

एक और उपयोगी चीज जो मैंने पाया है, मुझे कुछ यादृच्छिक विफलताओं के नीचे पहुंचने में मदद मिली विफलता पर स्क्रीनशॉट ले रही थी। अक्सर आप देख सकते हैं कि अन्य विंडोज़ या संवाद पॉप अप हो गए हैं क्योंकि ब्राउज़र सबसे आगे नहीं हो सकते हैं, आदि

+0

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

+0

@ क्रिप्टिक दिलचस्प। मैं अपने जैसा कुछ भी कर रहा हूं। क्या ऐसे पैटर्न हैं जिन्हें आप याद करते हैं कि उन flaky परीक्षणों के करीब देखो? – anjunatl

5

दोनों में से, मैं परीक्षण विफलताओं को फिर से शुरू करना चाहूंगा, या परीक्षण विफलता पर, परीक्षण पुनः प्रयास करें।

यदि आप परीक्षण विफलताओं की एक निश्चित संख्या स्वीकार करते हैं, तो आपको समस्याएं आती हैं कि किस परीक्षण को विफल करने की अनुमति है। आपको परीक्षण के दो सेट रखना होगा, कुछ जो असफल होने की अनुमति है, कुछ जो नहीं हैं।

पुन: प्रयास करने के लिए, मैं न्यूटिट के साथ परीक्षण करने में कोई विशेषज्ञ नहीं हूं, लेकिन आप परीक्षण स्वयं को पुनः प्रयास कर सकते हैं। जुनीट में, आप एक नियम पेश कर सकते हैं ताकि यदि कोई परीक्षण विफल हो जाए, तो यह अधिकतम 3 बार पुनः प्रयास करेगा। यह शायद आपके पास होने वाली अधिकांश समस्याओं से बच जाएगा। मुझे नहीं पता कि एनयूनीट में ऐसा कैसे करें, लेकिन my answer से How to Re-run failed JUnit tests immediately? देखें। यह आपको सामान्य विचार देगा।

+0

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

+0

@ सैमवुड पूरी तरह से सहमत हैं। –

+0

धन्यवाद, यह न्यूटिट में ऐसा करने के लिए अजीब था, लेकिन जब तक मैंने अल्पावधि समाधान के रूप में परीक्षणों को डीबग नहीं किया, तब तक मैं इसे जोड़ने में कामयाब रहा – Kryptic

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