यूनिट टेस्ट क्यों काफी नहीं हैं, और E2E टेस्ट कब जरूरी हैं
\n\nसोचिए: आपने C# में परफेक्ट कोड लिखा। यूनिट टेस्ट पास हैं, कोड कवरेज 95% है, कोड-रिव्यू भी हो गया। आप रिलीज़ करते हैं, और यूज़र्स शिकायत करते हैं: "अगर कार्ट में 3 से ज़्यादा आइटम हैं तो 'ऑर्डर करें' बटन काम नहीं करता।" यह परिचित लगता है?
\n\nयूनिट टेस्ट मेथड्स को अलग-थलग जांचते हैं। इंटीग्रेशन टेस्ट डेटाबेस और API के कनेक्शन को चेक करते हैं। लेकिन C# एप्लिकेशन का E2E टेस्टिंग (एंड-टू-एंड) ही एकमात्र तरीका है यह सुनिश्चित करने का कि पूरा सिस्टम एक साथ काम कर रहा है: ब्राउज़र, सर्वर, डेटाबेस, बाहरी API। स्कोप्ड टेस्ट रियल यूज़र के एक्शन को सिम्युलेट करते हैं: क्लिक, डेटा एंट्री, पेज लोड होने का इंतज़ार।
\n\nइस आर्टिकल में हम सिर्फ थ्योरी नहीं बताएंगे। हम दिखाएंगे कि Selenium और Playwright के साथ C# में E2E टेस्ट कैसे लिखें, Page Object Model के ज़रिए कोड को कैसे व्यवस्थित करें, और CI/CD में ऑटोमेटेड टेस्ट कैसे शामिल करें। चलिए शुरू करते हैं।
\n\nव्यवहार में E2E टेस्टिंग C# क्या है
\n\nE2E टेस्ट एक स्क्रिप्ट है जो यूज़र के पूरे सफर को कवर करती है: पेज खोलने से लेकर लक्ष्य कार्रवाई पूरी करने तक (खरीदारी, रजिस्ट्रेशन, फॉर्म सबमिट)। C# डेवलपर के लिए इसका मतलब आमतौर पर यह है:
\n\n- \n
- WebDriver के ज़रिए ब्राउज़र लॉन्च करना (Chrome, Firefox, Edge) \n
- पेज पर एलिमेंट्स ढूंढना (बटन, इनपुट फील्ड, लिंक) \n
- एक्शन करना (क्लिक, टेक्स्ट टाइप करना, लिस्ट से चुनना) \n
- अपेक्षित परिणाम की जांच करना (मैसेज दिखा, URL बदला, डेटा अपडेट हुआ) \n
- ब्राउज़र बंद करना और टेस्ट डेटा साफ करना \n
यूनिट टेस्ट से मुख्य अंतर: E2E टेस्ट रियल UI के साथ काम करते हैं। ये धीमे, नाज़ुक (CSS-सेलेक्टर्स पर निर्भर) होते हैं, लेकिन क्रिटिकल बिज़नेस सीनारियो की जांच के लिए अमूल्य हैं।
\n\nC# के लिए E2E टेस्टिंग टूल्स: Selenium बनाम Playwright
\n\nटूल चुनना पहला सवाल है जो टीम के सामने आता है। आइए दो सबसे लोकप्रिय विकल्पों पर नज़र डालें।
\n\nSelenium WebDriver
\nइंडस्ट्री का मानक। यह WebDriver के ज़रिए काम करता है - एक अलग प्रोसेस जो ब्राउज़र को कंट्रोल करता है। सभी ब्राउज़र्स को सपोर्ट करता है, बड़ा कम्युनिटी, हज़ारों रेडी-मेड समाधान। नुकसान: सेटअप के लिए ड्राइवर्स (ChromeDriver, GeckoDriver) चाहिए, और इंतज़ार के कारण टेस्ट धीमे हो सकते हैं।
\n\n.NET के लिए Playwright
\nमाइक्रोसॉफ्ट का नया लेकिन पहले से लोकप्रिय टूल। यह सीधे DevTools प्रोटोकॉल के ज़रिए काम करता है, बिना अतिरिक्त लेयर के। तेज़, स्थिर, और एलिमेंट लोड होने का ऑटोमैटिक इंतज़ार करता है (कोई Thread.Sleep नहीं)। सिर्फ ब्राउज़र ही नहीं, बल्कि मोबाइल एमुलेटर्स को भी सपोर्ट करता है।
\n\nइस आर्टिकल में हम दोनों फ्रेमवर्क पर उदाहरण दिखाएंगे ताकि आप तुलना कर सकें।
\n\nC# में पहला E2E टेस्ट लिखना: Selenium
\n\nक्लासिक से शुरू करते हैं। NuGet के ज़रिए पैकेज इंस्टॉल करें:
\n\ndotnet add package Selenium.WebDriver\ndotnet add package Selenium.Support\ndotnet add package Selenium.WebDriver.ChromeDriver\n\nअब एक उदाहरण साइट के लिए टेस्ट लिखते हैं (मान लें यह एक ऑनलाइन स्टोर है)। हम जांचना चाहते हैं कि कार्ट में आइटम जोड़ने के बाद पेज पर आइटम काउंट का बैज दिखाई देता है या नहीं।
\n\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\nusing OpenQA.Selenium.Support.UI;\n\npublic class CartE2ETests\n{\n [Fact]\n public void AddItemToCart_ShouldUpdateCartBadge()\n {\n using var driver = new ChromeDriver();\n \n // Arrange\n driver.Navigate().GoToUrl("https://demo-store.com");\n driver.Manage().Window.Maximize();\n \n // Act\n var addToCartButton = driver.FindElement(By.CssSelector(".product-card .add-to-cart"));\n addToCartButton.Click();\n \n // Wait for badge to appear\n var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));\n var cartBadge = wait.Until(drv => \n drv.FindElement(By.CssSelector(".cart-badge")));\n \n // Assert\n Assert.Equal("1", cartBadge.Text);\n \n driver.Quit();\n }\n}\n\n
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें