एक ही समय में कई टेस्ट केस कैसे चलाएं TestNG सूट
⚡ स्मार्ट सारांश
के साथ कई परीक्षण मामले चलाएँ TestNG सुइट में Selenium यह आपको एक ही testng.xml से कई क्लास, पैकेज या चाइल्ड सूट को ट्रिगर करने की सुविधा देता है। यह विस्तृत गाइड पैरेलल थ्रेड्स, सूट हायरार्की, रिपोर्टिंग और आधुनिक AI सहायता को कवर करता है। TestNG 7.x परियोजनाएं।

TestNG यह आपको एक ही प्रोजेक्ट के भीतर समानांतर रूप से परीक्षण विधियों, कक्षाओं और पूर्ण परीक्षण सूट चलाने की सुविधा देता है। समानांतर निष्पादन कुल रनटाइम को कम करता है क्योंकि थ्रेड एक के बाद एक के बजाय एक साथ परीक्षण शुरू करते हैं। यह गाइड बताता है कि इसका उपयोग करके कई कक्षाओं (विभिन्न परीक्षण सूट) को कैसे चलाया जाए। TestNG 7.x के साथ Selenium वेबड्राइवर.
चरण १) एक बनाना TestNGपरीक्षणों को निष्पादित करने के लिए .xml फ़ाइल
कॉन्फ़िगरेशन बनाने के लिए, नीचे दिए गए चरणों का पालन करें।
- एक नया प्रोजेक्ट बनाएं Eclipse.
- प्रोजेक्ट में दो पैकेज बनाएं (उन्हें नाम दें) कॉम.सुइट1 और कॉम.सुइट2).
- प्रत्येक पैकेज में एक क्लास बनाएं (उन्हें नाम दें) फ्लिपकार्ट.जावा और Snapdeal.java) और नीचे दिए गए कोड को संबंधित क्लास में कॉपी करें।
- अपने प्रोजेक्ट में एक नई फ़ाइल बनाएं और उसे नाम दें testng.xml। सुनिश्चित करें कि TestNG प्लगइन इंस्टॉल हो गया है (निर्देश उपलब्ध हैं) यहाँ उत्पन्न करेंtestng.xml फ़ाइल में क्लास नाम, टेस्ट नाम और सूट नाम जैसे सभी कॉन्फ़िगरेशन होते हैं।
फ्लिपकार्ट.जावा
package com.suite1; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Flipkart { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and password String password = ""; // This method navigates to the Flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // Log in to Flipkart @Test public void login() { driver.findElement(By.partialLinkText("Login")).click(); driver.findElement(By.cssSelector(".fk-input.login-form-input.user-email")).sendKeys(username); driver.findElement(By.cssSelector(".fk-input.login-form-input.user-pwd")).sendKeys(password); driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click(); } // Search for a product @Test public void searchAndSelectProduct() { driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3"); driver.findElement(By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold")).click(); String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.cssSelector(".btn-express-checkout.btn-big.current")).click(); driver.findElement(By.cssSelector(".remove.fk-inline-block")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { Actions s = new Actions(driver); WebElement user = driver.findElement(By.partialLinkText(username)); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
स्नैपडील.जावा
package com.suite2; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SnapDeal { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and password String password = ""; String pinCode = ""; // This method navigates to the Snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } @Test public void login() { driver.findElement(By.xpath("//button[text()='Login']")).click(); driver.switchTo().frame("loginIframe"); driver.findElement(By.cssSelector("div[onClick='getLoginForm()']")).click(); driver.findElement(By.id("j_username")).sendKeys(username); driver.findElement(By.id("j_password_login")).sendKeys(password); driver.findElement(By.id("signin_submit")).click(); driver.switchTo().defaultContent(); } @Test public void searchAndSelectProduct() { driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword")).sendKeys("iphone 6s"); driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click(); String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click(); driver.findElement(By.id("pincode-check")).sendKeys(pinCode); driver.findElement(By.id("buy-button-id")).click(); driver.findElement(By.cssSelector("i[title='Delete Item']")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { driver.findElement(By.linkText("START SHOPPING NOW")).click(); Actions s = new Actions(driver); WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user")); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
TestNG. Xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="2" verbose="1" name="Gmail Suite" parallel="tests"> <test name="flipkart"> <classes> <class name="com.suite1.Flipkart"/> </classes> </test> <test name="Myntra"> <classes> <class name="com.suite2.SnapDeal"/> </classes> </test> </suite>
अंतिम परियोजना संरचना नीचे दिए गए उदाहरण के समान दिखती है।
चरण 2) समानांतर निष्पादन TestNG
ऊपर दी गई XML फ़ाइल को सेव करने के बाद, अगला चरण पैरेलल टेस्ट चलाना है। कोड नीचे दिखाया गया है।
1) धागा-गिनती: यह परिभाषित करता है कि कितने थ्रेड्स होंगे TestNG पैरेलल एग्जीक्यूशन के लिए स्पिन अप किया जा सकता है। उच्च मान एक साथ अधिक परीक्षण चलाता है, सीपीयू सीमा तक।
2) वाचाल: कंसोल में निष्पादन विवरण लॉग करता है। अनुमत मान 1 से 10 तक हैं। उच्च मान अधिक विस्तृत और बारीक लॉग उत्पन्न करते हैं।
3) नामसुइट का नाम। यह रहा “Gmail सुइट”।
4) समानांतरबताता है TestNG एक साथ क्या चलाना है। मान्य मान टेस्ट, क्लास, मेथड या इंस्टेंस हैं। डिफ़ॉल्ट मान है कोई नहीं.
testng.xml फ़ाइल पर राइट-क्लिक करें और चुनें इस रूप में चलाएँ > TestNG सूटएक बार यह प्रक्रिया पूरी हो जाने पर, आपको समेकित परिणाम दिखाई देंगे।
जब आप उपरोक्त कोड निष्पादित करेंगे, तो आपको निम्नलिखित आउटपुट मिलेगा।
आउटपुट:
1) testng.xml में परिभाषित सूट का नाम।
2) testng.xml में परिभाषित परीक्षण का नाम।
3) testng.xml में घोषित क्लास का नाम।
4) .java फ़ाइल में @Test एनोटेशन वाले मेथड नाम।
स्नैपडील टेस्ट के लिए भी यही प्रक्रिया अपनाई जाती है, इसलिए दोनों क्लास साथ-साथ चलती हैं।
चरण 3) एक ही पैरेंट testng.xml से कई सूट चलाना
बड़े प्रोजेक्ट्स में एक आम आवश्यकता यह होती है कि कई testng.xml फाइलों को एक ही ट्रिगर में जोड़ा जाए। TestNG 7.x पैरेंट सूट का समर्थन करता है जो चाइल्ड सूट को संदर्भित करता है। सूट-फ़ाइल प्रविष्टियाँ इस प्रकार रखें कि प्रत्येक चाइल्ड अपने थ्रेड काउंट, लिसनर और पैरामीटर को अलग-अलग रख सके। प्रत्येक चाइल्ड सूट को अलग से सेव करें, फिर पैरेंट को उसके पाथ पर पॉइंट करें। केवल पैरेंट फ़ाइल को ही चलाएँ। Eclipseमेवन या कमांड लाइन के माध्यम से।
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Parent Suite" parallel="tests" thread-count="4"> <suite-files> <suite-file path="./flipkart-suite.xml"/> <suite-file path="./snapdeal-suite.xml"/> </suite-files> </suite>
यह पैटर्न रिग्रेशन, स्मोक और सैनिटी सूट को अलग-अलग रखते हुए भी उन्हें पुन: प्रयोज्य बनाता है। आप सेटिंग करके मेवन श्योरफायर से पैरेंट फ़ाइल को भी ट्रिगर कर सकते हैं। <suiteXmlFile>parent-suite.xml</suiteXmlFile> प्लगइन कॉन्फ़िगरेशन के अंदर, जो निरंतर एकीकरण पाइपलाइनों में समान समानांतर लेआउट को काम करने में सक्षम बनाता है।
चरण 4) समानांतर संचालन के लिए सर्वोत्तम अभ्यास TestNG चलाता है
- पिन TestNG 7.x: उपयोग TestNG 7.10 या उसके बाद के संस्करण के साथ Selenium 4. इसलिए W3C-अनुरूप ड्राइवर थ्रेड्स में लगातार व्यवहार करते हैं।
- साझा स्थिति से बचें: चाल वेबड्राइवर फ़ील्ड को थ्रेडलोकल में स्थानांतरित करें ताकि प्रत्येक थ्रेड अपना स्वयं का सत्र रख सके।
- थ्रेड-काउंट को ट्यून करें: पहले सीपीयू कोर की संख्या से शुरुआत करें, फिर ईमेल करने योग्य एचटीएमएल रिपोर्ट और ग्रिड के लोड होने का इंतजार करें, उसके बाद ही इसे बढ़ाएं।
- परीक्षण डेटा को अलग करें: प्रत्येक थ्रेड के लिए अद्वितीय उपयोगकर्ता, कार्ट और पिन कोड का उपयोग करें ताकि लॉगिन कभी आपस में टकराएं नहीं।
- विफलता होने पर स्क्रीनशॉट कैप्चर करें: उन्हें एक के माध्यम से जोड़ें आईटेस्ट लिस्टनर अस्थिर समानांतर रन को तेजी से डीबग करने के लिए।
- एआई की सहायता का उपयोग करें: उपकरण जैसे Testimmabl और CodiumAI अस्थिर परीक्षणों को चिह्नित कर सकते हैं और अगले रन से पहले स्थिर चयनकर्ताओं का सुझाव दे सकते हैं।
निष्कर्ष
ऊपर दिया गया उदाहरण दिखाता है कि इसका उपयोग कैसे करें। TestNG समानांतर परीक्षणों को निष्पादित करने के लिए। TestNG 7.x आपको एक ही XML फ़ाइल से कई टेस्ट क्लास लॉन्च करने, कई चाइल्ड सूट को लिंक करने और पैरेलल थ्रेड्स को ट्यून करने की सुविधा देता है, जिससे बड़े पैमाने पर काम करना आसान हो जाता है। Selenium परियोजनाएं बहुत तेजी से पूरी हो जाती हैं।




