आप सेलेनियम (या समान) के लिए परीक्षण कैसे लिख सकते हैं जो मामूली या कॉस्मेटिक परिवर्तनों के कारण विफल नहीं होते हैं?


9

मैं पिछले हफ्ते या तो सेलेनियम सीखने और एक वेबसाइट के लिए वेब परीक्षणों की एक श्रृंखला का निर्माण कर रहा हूं, जिसे हम लॉन्च करने जा रहे हैं। यह सीखने के लिए बहुत अच्छा है, और मैंने कुछ xpath और css स्थान तकनीकों को उठाया है।

हालांकि मेरे लिए समस्या यह है कि छोटे-छोटे बदलावों को देखते हुए परीक्षणों को तोड़ दिया जाता है - div, id, या कुछ ऑटोइड नंबर में कोई बदलाव जो विगेट्स की पहचान करने में मदद करता है किसी भी संख्या में परीक्षण को तोड़ता है - यह सिर्फ बहुत भंगुर लगता है।

तो क्या आपने सेलेनियम (या अन्य समान) परीक्षण लिखे हैं, और आप परीक्षणों की भंगुर प्रकृति से कैसे निपटते हैं (या आप उन्हें भंगुर होने से कैसे रोकते हैं), और आप किस प्रकार के परीक्षण के लिए सेलेनियम का उपयोग करते हैं?


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

1
@talonx - यह केवल इस तरह के परीक्षण को चलाने के लिए पर्याप्त नहीं है, अगर एक छोटे से बदलाव से सूट में बड़ा बदलाव होता है, तो यह समस्याग्रस्त होने वाला है कि वे डेवलपर, सीआई बॉक्स या परीक्षकों द्वारा चलाए जा रहे हैं या नहीं
फिनकॉक

@ फ़िनके: सहमत - छोटे परिवर्तनों के परिणामस्वरूप बड़े परिवर्तन नहीं होने चाहिए। इसका मतलब है कि परीक्षण के मामले किसी ऐसे व्यक्ति द्वारा लिखे गए थे जो परिवर्तन करने वाले डेवलपर्स के संपर्क में नहीं है - संचार अंतराल की तरह बदबू आ रही है।
टेलोंक्स

@talonx: UI परीक्षण स्वाभाविक रूप से भंगुर होते हैं और यूनिट-परीक्षणों की तुलना में इसे चलाने में अधिक समय लगता है। वे एक विशेष चुनौती हैं, इसलिए मैं @ सैम के संगठन में डेवलपर्स के बारे में निष्कर्ष पर नहीं जाऊंगा।
अज़ेगलोव

2
मैंने शीर्षक बदल दिया है - उम्मीद है कि सवाल का थोड़ा और प्रतिनिधि और थोड़ा कम नकारात्मक।
जॉन हॉपकिंस

जवाबों:


7

सेलेनियम का उद्देश्य यूआई-चालित एकीकरण परीक्षण बनाना है

एकीकरण परीक्षण यह सत्यापित करते हैं कि आपके सिस्टम के सभी घटक एक साथ तैनात होने पर सही ढंग से काम करते हैं। एकीकरण परीक्षण एक पर्याप्त परीक्षण रणनीति नहीं है और अन्य परीक्षण रणनीतियों के पूरक हैं, उदाहरण के लिए यूनिट-परीक्षण और स्वीकृति परीक्षण

यूआई-चालित परीक्षण स्वाभाविक रूप से भंगुर होते हैं, हालांकि सेलेनियम और वॉटरिर रिकॉर्ड-एंड-प्लेबैक टूल के शुरुआती दिनों से एक कदम ऊपर हैं । इस समस्या से निपटने के कई तरीके हैं - यहाँ कुछ विश्वस्तरीय विशेषज्ञों की सलाह का संकलन है:

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

यूनिट- और स्वीकृति परीक्षणों से अधिकांश परीक्षण कवरेज प्राप्त करें । FinnNk के उत्तर में गोज्को एडज़िक के लेखों के लिंक देखें । Adzic ने बार-बार स्वीकार्यता परीक्षणों और UI को दरकिनार करके व्यावसायिक तर्क का परीक्षण करने के बारे में तर्क दिया।

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


Patrickwilsonwelsh.com के लिए लिंक अधिक काम नहीं कर रहा है, और उसके लिए अन्य संसाधन .. !!
MarmiK

4

सबसे महत्वपूर्ण बात यह है कि एक बार जब आप एक तुच्छ संख्या से पहले इस तरह के परीक्षण बनाते हैं, तो सममित परिवर्तन का विचार है - कोड में एक छोटे से बदलाव के परिणामस्वरूप परीक्षण सूट में एक छोटा परिवर्तन होना चाहिए।

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

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

Gojko Adzic के इस तरह के परीक्षण की बात आने पर उनके ब्लॉग पर बहुत सारी सलाह दी जाती है - अपने साइन ऑफ़ डेथ और विशेष रूप से इससे बचने के तरीके की जाँच करें ।


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

1
आमतौर पर आप किसी तत्व की पहचान करने के कुछ तरीके पा सकते हैं - शायद कुछ पाठ जिसमें तत्व शामिल है, या हो सकता है कि यह हमेशा किसी अन्य के समान सापेक्ष स्थिति हो। अंत में, अंतिम उपाय के रूप में, आप सेलेनियम का उपयोग करने वाले तत्वों का पता लगाने के लिए कस्टम लोकेटर रणनीतियों को भी परिभाषित कर सकते हैं जो आपको पूर्ण नियंत्रण प्रदान करता है (उदाहरण के लिए, यदि आप नाम के नाम के साथ तत्वों की तलाश कर रहे हैं और कुछ मनमाना सामान अंत में जोड़ा गया है, जैसे कि आपके मामला या asp.net वेबफॉर्म में)।
फिनकेक

1

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

व्यक्तिगत रूप से मुझे लगता है कि यदि <div>टैग की उपस्थिति एक परीक्षण को तोड़ती है, तो परीक्षण अनावश्यक रूप से आसपास के टैग पर सख्ती से निर्भर करता है, और अधिक उदार दृष्टिकोण लिया जाना चाहिए।

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