javascript - ब्राउज़र एक्सटेंशन का परीक्षण




testing tdd (2)

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

मेरे द्वारा उपयोग किए जाने वाले चरण हैं:

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

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

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

http://docs.seleniumhq.org/

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

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

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

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

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

और मेरे अवलोकन के बारे में मेरे लिए मुश्किल क्यों है - क्योंकि वहां बहुत सारे व्यवहार हैं, और इतने सारे मॉडल नहीं हैं, जो एक मंच पर भी निर्भर हैं।


मैं अपने ब्राउज़र एक्सटेंशन का परीक्षण करने के दो अलग-अलग तरीकों का अभ्यास करता हूं:

  • यूनिट परीक्षण
  • जोड़ने का परीक्षण

परिचय

मैं इस जवाब में एक उदाहरण के रूप में रॉब डब्ल्यू एक्सटेंशन द्वारा क्रॉस-ब्राउज़र यूट्यूब गीत का उपयोग करूंगा। इस एक्सटेंशन का मूल जावास्क्रिप्ट में लिखा गया है और एएमडी मॉड्यूल के साथ व्यवस्थित है। एक बिल्ड स्क्रिप्ट प्रत्येक ब्राउज़र के लिए एक्सटेंशन फ़ाइलों को उत्पन्न करता है। r.js साथ, मैं ब्राउज़र-विशिष्ट मॉड्यूल को शामिल करता हूं, जैसे क्रॉस-मूल HTTP अनुरोधों और लगातार स्टोरेज (वरीयताओं के लिए), और आईई के लिए पॉलीफ़िल के साथ एक मॉड्यूल।

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

कार्यप्रवाह

विकास के दौरान:

  1. फीचर को कार्यान्वित / संपादित करें, और यदि सुविधा तुच्छ नहीं है तो यूनिट परीक्षण लिखें।
  2. कुछ यूनिट परीक्षण चलाएं ताकि यह देखने के लिए कि कुछ तोड़ दिया गया है या नहीं। अगर कुछ गलत है, तो 1 पर वापस जाएं।
  3. गिट करने के लिए प्रतिबद्ध।

रिलीज से पहले:

  1. यह सत्यापित करने के लिए कि सभी मॉड्यूल अभी भी काम कर रहे हैं, सभी यूनिट परीक्षण चलाएं।
  2. यह सत्यापित करने के लिए कि सभी एक्सटेंशन अभी भी काम कर रहे हैं, सभी एकीकरण परीक्षण चलाएं।
  3. बंप संस्करण, एक्सटेंशन का निर्माण।
  4. आधिकारिक विस्तार दीर्घाओं और मेरी वेबसाइट पर अपडेट अपलोड करें (सफारी और आईई एक्सटेंशन को स्वयं द्वारा होस्ट किया जाना चाहिए) और गिट करने के लिए प्रतिबद्ध करें।

इकाई का परीक्षण

मैं परीक्षण लिखने के लिए mocha + expect.js का उपयोग करता हूं। मैं प्रत्येक मॉड्यूल के लिए हर विधि का परीक्षण नहीं करता, केवल जो मायने रखता है। उदाहरण के लिए:

  • डीओएम पार्सिंग विधि। जंगली (jQuery सहित) में अधिकांश डोम पार्सिंग विधियां त्रुटिपूर्ण हैं: किसी बाहरी संसाधन को लोड किया जाता है और जावास्क्रिप्ट निष्पादित किया जाता है।
    मैं सत्यापित करता हूं कि डीओएम पार्सिंग विधि सही दुष्प्रभावों के बिना सही ढंग से डीओएम को पार करती है।

  • वरीयता मॉड्यूल: मैं सत्यापित करता हूं कि डेटा सहेजा जा सकता है और लौटाया जा सकता है।

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

    • सबसे पहले मैं परीक्षण करता हूं कि InfoProvider मॉड्यूल सही तरीके से काम करता है या नहीं।
    • फिर, 17 स्रोतों में से प्रत्येक के लिए, मैं स्रोत ( InfoProvider साथ) को पूर्व परिभाषित क्वेरी पास करता InfoProvider और सत्यापित करता InfoProvider कि परिणाम अपेक्षित हैं:
      • क्वेरी सफल होती है
      • लौटा गीत शीर्षक मिलान (एक शब्द समानता एल्गोरिदम applying करके)
      • लौटे गीतों की लंबाई अपेक्षित सीमा के भीतर आती है।
  • चाहे यूआई स्पष्ट रूप से टूटा हुआ न हो, उदाहरण के लिए बंद करें बटन पर क्लिक करके।

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

किसी वेब पेज के भीतर परीक्षण चलाना पर्याप्त नहीं है, क्योंकि एक्सटेंशन का वातावरण सामान्य पृष्ठ से भिन्न हो सकता है। उदाहरण के लिए, ओपेरा 12 एक्सटेंशन में, कोई वैश्विक location वस्तु नहीं है।

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

सारांश

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

एकीकरण जांच

मैं यह जांचने के लिए सेलेनियम 2 का उपयोग करता हूं कि मेरा एक्सटेंशन अभी भी YouTube, ग्रूवेशर्क (3x) और Spotify पर काम करता है या नहीं।

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

सेलेनियम आईडीई अन्य प्रारूपों में मौजूदा परीक्षणों को निर्यात करने का विकल्प प्रदान करता है, जिसमें जुनीट 4 परीक्षण (जावा) शामिल हैं। दुर्भाग्यवश, यह परिणाम संतोषजनक नहीं था। कई आदेशों को पहचाना नहीं गया था।

इसलिए, मैंने सेलेनियम आईडीई को छोड़ दिया, और सेलेनियम में स्विच किया।
ध्यान दें कि जब आप "सेलेनियम" खोजते हैं, तो आपको सेलेनियम आरसी (सेलेनियम 1) और सेलेनियम वेबड्राइवर (सेलेनियम 2) के बारे में जानकारी मिल जाएगी। पहला पुराना और बहिष्कृत है, बाद वाले (सेलेनियम वेबड्राइवर) का उपयोग नई परियोजनाओं के लिए किया जाना चाहिए।

एक बार जब आप खोज लें कि दस्तावेज़ीकरण कैसे काम करता है, तो इसका उपयोग करना काफी आसान है।
मैं प्रोजेक्ट पेज पर प्रलेखन पसंद करता हूं, क्योंकि यह आम तौर पर संक्षिप्त ( wiki ) और पूर्ण ( जावा दस्तावेज़ ) है।

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

स्वचालित परीक्षण अच्छा है। क्या अच्छा है? एक्सटेंशन की स्थापना स्वचालित!
ChromeDriver और FirefoxDriver एक्सटेंशन की स्थापना का समर्थन करते हैं, जैसा कि इस उदाहरण में देखा गया है।

SafariDriver , मैंने एक कस्टम सफारी एक्सटेंशन स्थापित करने के लिए दो कक्षाएं लिखी हैं। मैंने इसे प्रकाशित किया है और एक पीआर में सेलेनियम में भेजा है, इसलिए यह भविष्य में सभी के लिए उपलब्ध हो सकता है: https://github.com/SeleniumHQ/selenium/pull/87

OperaDriver कस्टम एक्सटेंशन की स्थापना का समर्थन नहीं करता है (तकनीकी रूप से, हालांकि यह संभव होना चाहिए)।
ध्यान दें कि क्रोमियम संचालित ओपेरा के आगमन के साथ, पुराना ओपेराड्राइवर अब और काम नहीं करता है।

एक इंटरनेट एक्सप्लोरर ड्राइवर है , और यह निश्चित रूप से एक कस्टम एक्सटेंशन स्थापित करने की अनुमति नहीं देता है। इंटरनेट एक्सप्लोरर में एक्सटेंशन के लिए अंतर्निहित समर्थन नहीं है। एक्सटेंशन एमएसआई या एक्सई इंस्टॉलर्स के माध्यम से स्थापित किए जाते हैं, जो इंटरनेट एक्सप्लोरर में भी एकीकृत नहीं हैं। इसलिए, IE में अपने एक्सटेंशन को स्वचालित रूप से इंस्टॉल करने के लिए, आपको चुपचाप इंस्टॉलर चलाने में सक्षम होना चाहिए जो आपके आईई प्लगइन को इंस्टॉल करता है। मैंने अभी तक यह कोशिश नहीं की है







browser-extension