सेलेनियम पर एक्सटी। जेएस परियोजना का परीक्षण

तीन चीजें हैं जो आप अंतहीन रूप से कर सकते हैं:
1. आग जला के देखो
2. पानी चलाते हुए देखो
3. और देखो कि कोई कैसे काम करता है

हमारे मामले में, हमारे 9000 से अधिक परीक्षण स्पिन देखें। सेलेनियम परीक्षण विशेष रूप से सुंदर लगते हैं। यह एक रैबीड जेरोबा जैसा दिखता है जिसमें एक स्थायी गति मशीन होती है जो सिस्टम का परीक्षण करने के लिए नीचे बैठती है।

मैं आपके बारे में नहीं जानता, लेकिन यह मुझे परेशान करता है:


बाकी लेख मैं आपको थोड़ी सफलता-कहानी बताऊंगा कि कैसे हमने सेलेनियम पर अपना परीक्षण आयोजित किया


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

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

ऐसा लगता है कि परीक्षण को माउस से आसानी से क्लिक किया जा सकता है, लेकिन इस परीक्षण का जीवन काल कुछ दिनों का था। इससे भी बदतर, जब परीक्षण गिर गया, तो इसे फिर से पोस्ट करने की तुलना में गिरावट का कारण समझना अक्सर अधिक कठिन था (जो एक दो बार किया गया था)।

और परीक्षण धीमी थे! परिदृश्य की कल्पना करें:
1. हम एक डेटा स्ट्रिंग में एक खोज स्ट्रिंग चलाते हैं
2. सर्वर एक प्रतिक्रिया देता है - एक खाली ग्रिड (जो कभी-कभी सही हो सकता है)
3. और उसके बाद एक त्रुटि संदेश भेजता है अगर यह हुआ।

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

और यह सब नहीं है। क्या आपने सेलेनियम लॉग से पेस्ट किए गए परीक्षण के पतन के कारणों का पता लगाने की कोशिश की है? तो, ताकि परीक्षण को फिर से न चलाएं, लेकिन लॉग को देखने और समस्या का सार समझने के लिए। इसने मेरे लिए काम नहीं किया।

कुछ महीनों के बाद, यह स्पष्ट हो गया कि इस तरह के परीक्षण से हमें अच्छा होने में अधिक समय लगता है और हमने सेलेनियम परीक्षणों को मार दिया।

इस बीच, परियोजना बढ़ती जा रही थी, कार्यों की संख्या हजारों में मापी गई थी, और अब, एक साल पहले, वीर सेल्मारिल ने इस समस्या को एक अद्यतन सेलेनियम के साथ लौटाया और एक्सटर्जे का परीक्षण करने की एक अद्यतन समझ।

उनका समाधान था: एक एपीआई लिखना।

हमने माउस के साथ परीक्षणों की रिकॉर्डिंग को छोड़ने का फैसला किया, लेकिन फॉर्म में एक छोटी संकेतन के साथ NUnit (!) टेस्ट लिखने का अवसर आने के लिए:
1. उपयोगकर्ताओं को निर्माण तिथि से फ़िल्टर करें = आज।
2. नाम से क्रमबद्ध
3. पहली प्रविष्टि खोलें
4. पासवर्ड बदलें।
5. बचाओ।
6. ठीक क्लिक करें यदि "क्या आप सुनिश्चित हैं" खिड़की चबूतरे।

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

एक महीने की कड़ी मेहनत, और एपीआई का पहला संस्करण दिखाई दिया।
यहाँ एक नमूना परीक्षण है:
/// <summary> /// DocumentOperationGridOperationTest /// </summary> [Test] public void DocumentOperationGridOperationTest() { var baseDocName = typeof(BaseInDocument).ModelName(); var implDocName = typeof(BaseInDocumentImpl).ModelName(); using (var grid = Env.Navigation.OpenList(implDocName)) { var operationCaption = "_"; grid.Toolbar.Click(operationCaption); var docForm = Env.TabPanel.GetForm(implDocName); docForm.Toolbar.Click("", "  {0}".FormatWith(operationCaption)); docForm.Close(); } using (var grid = Env.Navigation.OpenList(baseDocName)) { var operationCaption = "_"; grid.Data.First().Select(); grid.Toolbar.Click("", operationCaption); grid.Toolbar.Click(""); var docForm = Env.TabPanel.GetForm(implDocName); var fieldValue = docForm.GetField<TextField>("SomeNewField"); Assert.False(string.IsNullOrEmpty(fieldValue.GetValue()), "         ,        "); grid.DeleteFirstRow(); docForm.Close(); } } 



और यहां एपीआई कार्यान्वयन जैसा दिखता है
  /// <summary> ///      /// </summary> /// <param name="fieldName">   ,          </param> /// <param name="buttonCaption">    ,      (  )</param> /// <returns>    </returns> public IToolbarElement GetContextMenuItem(string fieldName, string[] buttonCaption) { var buttonsFullPath = Oreodor.Utils.EnumerableExtensions.ToString(buttonCaption, "->"); Env.AddHistory("         Id - SysName = {0} - {1},   {2},   '{3}'".FormatWith( Id, this.Data.ContainsKey("SysName") ? this.Data["SysName"] : string.Empty, fieldName, buttonsFullPath)); IToolbarElement menuItem = null; if (buttonCaption.Length > 0) { var menuItems = new List<IToolbarElement>(); if (IsContextMenuVisible(fieldName)) { menuItems.AddRange(GetCurrentContextMenu()); } else { menuItems.AddRange(ShowContextMenu(fieldName)); } menuItem = Toolbar.CheckItem(menuItems, buttonCaption[0]); if (buttonCaption.Length > 1) { for (var i = 1; i < buttonCaption.Length; i++) { var menuCaption = buttonCaption[i - 1]; var itemCaption = buttonCaption[i]; var menu = menuItem.Menu.ToList(); Assert.That(menu.Count() != 0, " '{0}'    , ..      '{1}'.".FormatWith(menuCaption, itemCaption)); var candidateToolbarItem = Toolbar.CheckItem(menu, itemCaption); Assert.That(candidateToolbarItem != null, "   '{0}'   '{1}'.   : {2}".FormatWith(itemCaption, menuCaption, menu.Aggregate(", ", (aggregated, item) => aggregated + "'" + item.Text + "'"))); menuItem = candidateToolbarItem; } } } return menuItem; } 



एक महत्वपूर्ण समस्या भी हल हो गई - टीमसिटी लॉग से त्रुटि की त्वरित समझ। आपी प्रत्येक परीक्षण के लिए ऐसी रिपोर्ट तैयार करती है।

नीचे पंक्ति: अब हमने सिस्टम इंटरफ़ेस के व्यवहार का लगभग 80% कवर किया है। मैं अपना अनुभव साझा कर रहा हूं, सेलेनियम पर Ext.Js के परीक्षण के लिए, आपको निम्नलिखित समस्याओं को हल करने के लिए परीक्षण के लिए अपना स्वयं का आवरण लिखना होगा:
1. परीक्षण की स्पष्टता और स्पष्टता
2. प्रणाली को बदलने के लिए परीक्षण की स्थिरता
3. परीक्षणों की गति
4. परीक्षण के टूटने के कारणों को समझना आसान है।
ब्राउज़र इंटरफ़ेस से चिपके हुए टेस्ट सबसे अधिक संभावना आपको सूट नहीं करेंगे।

पुनश्च
यदि आपके पास एक्स्ट.जेएस परियोजना है और आप इसे सेलेनियम परीक्षणों के साथ कवर करने का निर्णय लेते हैं - सलाह मांगें और मदद करने का प्रयास करें।

Source: https://habr.com/ru/post/In181660/


All Articles