2012-10-09 15 views
37

मैं परीक्षण ढांचे को बेहतर ढंग से समझने और सेलेनियम में देख रहा हूं। मैंने पहले HTMLUnit का उपयोग किया है, मुख्य रूप से जब मुझे वेबसाइट या पसंद से कुछ जानकारी स्क्रैप करने की आवश्यकता होती है।सेलेनियम बनाम HtmlUnit?

लेखन स्वचालन लिखने के संदर्भ में, सेलेनियम बनाम HTMLUnit का लाभ/नुकसान क्या है? मुझे लगता है कि सेलेनियम HTMLUnit की तुलना में स्थापित करने के लिए अधिक जटिल है, हालांकि साथ ही सेलेनियम के लिए एक HTMLUnitDriver भी है जो मुझे लगता है कि HTMLUnit के समान ही व्यवहार करता है?

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

हो सकता है कि मैं सेलेनियम को सही ढंग से समझ नहीं पा रहा हूं। कुछ दिशानिर्देश और पॉइंटर्स बहुत अच्छे होंगे!

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

क्या मोबाइल साइटों पर हेडलेस परीक्षण करने के लिए वैसे भी है? क्या उपयोगकर्ता-एजेंट बदलना पर्याप्त होगा? मैंने उपयोगकर्ता-एजेंट को बदलने के आसपास कुछ पोस्ट देखी हैं जो कि अपनी चुनौतियों का सामना करते हैं, उदाहरण के लिए। Set user-agent in Selenium RC

बहुत बहुत धन्यवाद!

+1

आप PhantomJS का उपयोग कर या "बिना सिर क्रोम" के बारे में सोचा है बजाय ? – djangofan

उत्तर

62

अच्छी तरह से, विस्तार से अंतर को समझाने की कोशिश करेगा।

समांतर परीक्षण के बारे में बोलते हुए, सेलेनियम ग्रिड का उपयोग करना बेहतर होता है। सेलेनियम आरसी और सेलेनियम ग्रिड की मूल अवधारणा। traditional selenium setup selenium grid setup selenium grid:Requesting a Specific Environment आप अधिक विवरण here

सेलेनियम webDriver के बारे में कुछ शब्द में प्राप्त कर सकते हैं:

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

वेबड्राइवर 'ड्राइव' ब्राउज़र सेलेनियम-आरसी की तुलना में कैसे करता है?

सेलेनियम-वेबड्राइवर ऑटोमेशन के लिए प्रत्येक ब्राउज़र के मूल समर्थन का उपयोग करके ब्राउज़र को सीधे कॉल करता है। ये सीधी कॉल कैसे की जाती हैं, और वे जिन सुविधाओं का समर्थन करते हैं, वे उस ब्राउज़र पर निर्भर करते हैं जिसका आप उपयोग कर रहे हैं। प्रत्येक अध्याय में बाद में प्रत्येक 'ब्राउज़र चालक' पर जानकारी प्रदान की जाती है। सेलेनियम-आरसी से परिचित लोगों के लिए, यह आपके द्वारा उपयोग किए जाने वाले कार्यों से काफी अलग है। सेलेनियम-आरसी ने प्रत्येक समर्थित ब्राउज़र के लिए एक ही तरीके से काम किया। ब्राउज़र को लोड होने पर ब्राउज़र में जावास्क्रिप्ट फ़ंक्शंस को इंजेक्शन दिया गया था और उसके बाद ब्राउज़र में AUT ड्राइव करने के लिए अपने जावास्क्रिप्ट का उपयोग किया गया था। WebDriver इस तकनीक का उपयोग नहीं करता है। फिर, यह ब्राउज़र को ऑटोमेशन के लिए समर्थित समर्थन के ब्राउज़र का उपयोग करके सीधे चलाता है।

WebDriver और सेलेनियम-सर्वर

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

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

सेलेनियम-WebDriver के ड्राइवर का उपयोग करने के HtmlUnit ड्राइवर चाहते हैं नहीं कर रहे हैं WebDriver के खिलाफ कुंजी इंटरफेस का नाम है कौन से परीक्षण लिखे जाने चाहिए, लेकिन कई कार्यान्वयन हैं। इनमें शामिल हैं:

HtmlUnit ड्राइवर यह वर्तमान में WebDriver का सबसे तेज और सबसे हल्के कार्यान्वयन है। जैसा कि नाम से पता चलता है, यह HtmlUnit पर आधारित है। HtmlUnit एक जीयूआई के बिना एक WebBrowser का जावा आधारित कार्यान्वयन है। किसी भी भाषा बाइंडिंग (जावा के अलावा) के लिए सेलेनियम सर्वर को इस ड्राइवर का उपयोग करने की आवश्यकता है।

पेशेवरों

  • WebDriver
  • एक शुद्ध जावा समाधान और की सबसे तेजी से कार्यान्वयन तो यह मंच स्वतंत्र है।
  • का समर्थन करता है जावास्क्रिप्ट

विपक्ष

  • Emulates अन्य ब्राउज़रों 'जावास्क्रिप्ट व्यवहार (नीचे देखें) लोकप्रिय ब्राउज़रों की HtmlUnit ड्राइवर कोई नहीं में

जावास्क्रिप्ट जावास्क्रिप्ट इंजन का उपयोग करता HtmlUnit (राइनो) द्वारा उपयोग किया जाता है।यदि आप HtmlUnit का उपयोग करके जावास्क्रिप्ट का परीक्षण करते हैं तो परिणाम उन ब्राउज़रों से काफी भिन्न हो सकते हैं। जब हम "जावास्क्रिप्ट" कहते हैं तो हम वास्तव में "जावास्क्रिप्ट और डोम" का अर्थ देते हैं। हालांकि डब्ल्यूओएम द्वारा डब्ल्यूओएम को परिभाषित किया गया है, प्रत्येक ब्राउज़र के पास अपने स्वयं के quirks और डीओएम के कार्यान्वयन में अंतर है और कैसे जावास्क्रिप्ट इसके साथ बातचीत करता है। एचटीएमएल यूनिट के पास डीओएम का प्रभावशाली पूर्ण कार्यान्वयन है और जावास्क्रिप्ट का उपयोग करने के लिए इसका अच्छा समर्थन है, लेकिन यह किसी भी अन्य ब्राउज़र से अलग नहीं है: इसके डब्लू 3 सी मानक और प्रमुख ब्राउज़रों के डीओएम कार्यान्वयन दोनों के अपने मतभेद और अंतर हैं, इसके बावजूद अन्य ब्राउज़रों की नकल करने की क्षमता। वेबड्राइवर के साथ, हमें एक विकल्प बनाना पड़ा; क्या हम HtmlUnit की जावास्क्रिप्ट क्षमताओं को सक्षम करते हैं और उन समस्याओं में चलने वाली टीमों का जोखिम चलाते हैं जो केवल स्वयं को प्रकट करते हैं, या क्या हम जावास्क्रिप्ट को अक्षम करते हैं, यह जानकर कि जावास्क्रिप्ट पर निर्भर होने वाली अधिक से अधिक साइटें हैं? हमने रूढ़िवादी दृष्टिकोण लिया, और जब हम HtmlUnit का उपयोग करते हैं तो डिफ़ॉल्ट रूप से समर्थन अक्षम कर दिया गया है। WebDriver और HtmlUnit दोनों की प्रत्येक रिलीज के साथ, हम इस निर्णय को पुन: प्राप्त करते हैं: हम कुछ बिंदु पर HtmlUnit पर डिफ़ॉल्ट रूप से जावास्क्रिप्ट को सक्षम करने की उम्मीद करते हैं।

webDriver के सेटअप में गहरी जांच करने के लिए this

HtmlUnit documentation से देखें: HtmlUnit एक सामान्य इकाई परीक्षण ढांचा नहीं है। यह विशेष रूप से परीक्षण उद्देश्यों के लिए ब्राउज़र को अनुकरण करने का एक तरीका है और इसका उद्देश्य अन्य परीक्षण ढांचे जैसे जुनीट या टेस्टएनजी के भीतर उपयोग किया जाना है।

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

मोबाइल स्वचालन बारे में बोलते हुए सेलेनियम भी एक iPhone ड्राइवर है iPhone Driver wiki article और एंड्रॉयड ड्राइवर Android Driver wiki article

भी देखें this presentation

दुर्भाग्य से मैं आप मोबाइल चालकों के मेरे कार्य अनुभव मूल्यांकन मैं के रूप में नहीं दे सकता वेब स्वचालन से निपटें (कोई मोबाइल नहीं)। यह भी पता है कि Cucumber (स्वचालन उपकरण) मोबाइल automators के बीच लोकप्रिय है। this और this देखें।

यह अब आप के लिए एक लील थोड़ा और अधिक स्पष्ट आ आशा =)

+0

स्पष्टीकरण के लिए बहुत बहुत धन्यवाद! ...तो ब्राउजर-विशिष्ट ड्राइवर (HTMLUnitDriver के बजाए) बेहतर है क्योंकि वे बिल्कुल जांचते हैं कि ब्राउज़र कैसा व्यवहार करेगा - लेकिन यह उस लागत पर आता है जो ब्राउज़र आपकी स्क्रीन पर अंदर और बाहर पॉप करता है (जब आप अपना परीक्षण चला रहे हों तो केवल एक मामूली परेशानी स्थानीय रूप से आप देखते हैं कि यह ब्राउज़र ऐप स्वयं ही अंदर और बाहर पॉप करता है) - वास्तविक ब्राउजर लोड होने के आसपास कोई रास्ता नहीं है (HTMLUnitDriver का उपयोग करने के अलावा)? –

+0

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

+0

कुछ साल पहले मैंने सेलेनियम आरसी को विंडोज सर्विस के रूप में स्थापित करने के लिए जावास्वायर टूल का उपयोग किया था ताकि मैं इसे मशीन में लॉग इन किए बिना एक हेडलेस प्रक्रिया के रूप में अनुपयुक्त छोड़ सकूं। जेनकींस एक एएनटी निष्पादन कार्य के माध्यम से विंडोज सेवा शुरू करेंगे और टेस्ट सूट पूरा होने पर एक और एएनटी कार्य सेवा को रोक देगा। मैंने सेवा स्थापना करने के लिए कस्टम बैट फ़ाइल बनाने के लिए इस http://bit.ly/pWS7yR का पालन किया, उदाहरण के लिए http://pastebin.com/zvivguaP –

2

सेलेनियम और HTMLUnit कुछ हद तक अवधारणा में समान हैं, लेकिन सेलेनियम अधिक परिपक्व/मजबूत है और इसमें बहुत अधिक सुविधाएं हैं।

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

HTMLUnit का उपयोग करने के लिए मैं एकमात्र लाभ देख सकता हूं कि यह कम संसाधन गहन है, इसलिए आप कम हार्डवेयर पर परीक्षण चला सकते हैं, लेकिन सेलेनियम के समानांतर समर्थन के साथ भी यह वास्तव में सच नहीं है।

1

जब से परीक्षण चलाने जेनकींस रात भर, आप आमतौर पर इस तरह के X11 या Windows जिसमें वेब को चलाने के लिए के रूप में एक विंडोइंग प्रणाली के लिए कोई उपयोग कर सकते है ब्राउज़र। इसलिए मुझे उस मामले में HTMLUnit वेब ड्राइवर का उपयोग करने का लाभ दिखाई देता है क्योंकि इसे विंडोिंग सिस्टम तक पहुंच की आवश्यकता नहीं होती है।

+0

आप जेनकिंस के साथ किसी भी गुई ब्राउज़र चलाने के लिए Xvbf का उपयोग कर सकते हैं –

0

कम से कम UX सिस्टम आपको लगता है कि प्रदर्शन करने के लिए ब्राउज़रों उदाहरण Xvfb के लिए इस्तेमाल करते हैं और इंगित कर सकते हैं उन्हें "नेतृत्वहीन" बनाने के लिए पर भी देखें http://infiniteundo.com/post/54014422873/headless-selenium-testing-with-firefox-and-xvfb या How do I run Selenium in Xvfb?

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