में समूह TestNG

⚡ स्मार्ट सारांश

में समूह TestNG यह आपको टेस्ट मेथड्स को लॉजिकल लेबल्स के साथ टैग करने और फिर उन्हें XML सूट के माध्यम से शामिल या बाहर करने की सुविधा देता है। यह तरीका कोड को दोबारा लिखे बिना स्मोक, रिग्रेशन और डिपेंडेंसी-ड्रिवन रन को सरल बनाता है। Java कोड।

  • एनोटेशन सिंटैक्स: उपयोग @Test(groups = {"smoke","regression"}) किसी भी विधि को एक या अधिक तार्किक समूह नामों के साथ टैग करना।
  • 📜 XML नियंत्रण: RSI <groups><run><include> और <exclude> testng.xml के अंदर मौजूद टैग यह तय करते हैं कि वास्तव में कौन से टैग किए गए मेथड निष्पादित होंगे।
  • 🔗 निर्भरता: RSI dependsOnGroups विशेषताएँ क्रमबद्धता को बाध्य करती हैं, इसलिए आश्रित परीक्षण शुरू होने से पहले पूर्वापेक्षित समूह हमेशा समाप्त हो जाते हैं।
  • 🤖 एआई चयन: एआई टेस्ट-इम्पैक्ट टूल कोड परिवर्तनों को प्रासंगिक समूहों में मैप करते हैं, ताकि प्रत्येक कमिट पर केवल प्रभावित सूट ही चलें।
  • 🧪 TestNG 7.x: आधुनिक रिलीज़ समूहों को समानांतर निष्पादन, श्रोताओं और मेवन श्योरफायर पाइपलाइनों के साथ पूरी तरह से संगत बनाए रखती हैं।

में समूह TestNG

TestNG यह एक परीक्षण ढांचा है जो यूनिट, फंक्शनल, एंड-टू-एंड, यूआई और इंटीग्रेशन परीक्षणों को कवर करता है। Java परियोजनाओं.

आप एक XML सूट बनाकर और उसे Maven के माध्यम से ट्रिगर करके एक या एक से अधिक पैकेज (एक पैकेज परिभाषित निर्देशिका लेआउट में संबंधित क्लासों को समाहित करता है) चला सकते हैं।

TestNG उदाहरण सहित समूह

आप समूहों का उपयोग करते हैं TestNG कब:

  • आप कार्यात्मक क्षेत्र के आधार पर कई वर्गों में परीक्षण विधियों को बिखेरना नहीं चाहते हैं, और
  • आप चयनित टेस्ट केसों को छोड़ना (निष्पादित न करना) चाहते हैं, मानो वे कोडबेस में मौजूद ही न हों।
  • इन दोनों लक्ष्यों को प्राप्त करने के लिए, आप विधियों को तार्किक समूहों में वर्गीकृत करते हैं। TestNG फिर यह XML सूट में घोषित "शामिल करें" और "बाहर करें" फ़िल्टरों का सम्मान करता है।

नीचे दिया गया उदाहरण एक परीक्षण विधि पर उपयोग किए गए समूह-टैगिंग सिंटैक्स को दर्शाता है।

@परीक्षा (समूहों = { “बंधन”, “मजबूत_संबंध” })

यहां दो समूह नामों का उपयोग किया गया है, अर्थात् bonding और strong_tiesये तार्किक लेबल हैं जिन्हें आप अपने प्रोजेक्ट के अनुसार नाम बदल सकते हैं।

RSI <groups> टैग XML सूट के भीतर समूह फ़िल्टर की शुरुआत को चिह्नित करता है।

फिर आप टैग किए गए वर्गों में से एक चयनित समूह चुनने के लिए XML को अनुकूलित करते हैं। नीचे दिया गया उदाहरण समूह घोषणा सिंटैक्स दिखाता है।

<समूहों>
<रन>
<शामिल नाम=“बंधन” />
</रन>
</समूहों>

मान लीजिए कि एक ही क्लास में 10 टेस्ट मेथड हैं।

उन विधियों में से:

  • 6 तरीकों से ले जाया जाता है bonding समूह, और
  • 4 तरीकों से ले जाया जाता है strong_ties समूह.

इसके बाद, आप मेवन को सेटअप करते हैं और Java पथों का उपयोग करें Eclipse एक IDE के माध्यम से XML फ़ाइलों के अंदर समूह उपयोग को प्रदर्शित करना। Java-आधारित मेवन प्रोजेक्ट।

इसके लिए XML बनाएं TestNG टैग के साथ

  • Maven फ्रेमवर्क में XML (एक्सटेंसिबल मार्कअप लैंग्वेज) फ़ाइल एक या अधिक परीक्षणों के लिए कॉन्फ़िगरेशन संग्रहीत करती है, जिन्हें इसके अंदर घोषित किया जाता है। टैग।
  • प्रत्येक परीक्षण प्रविष्टि को एक में लपेटा जाता है टैग और एक या अधिक को धारण कर सकता है TestNG कक्षाएं।
  • A Java एक या अधिक के साथ कक्षा @परीक्षा इसकी विधियों पर टिप्पणियों को एक के रूप में माना जाता है TestNG वर्ग.

एक कार्यशील testng.xml फ़ाइल बनाने के लिए कई टैग क्रमानुसार दिखाई देते हैं, अर्थात् , , और .

  • RSI टैग में सुइट-स्तर का नाम होता है जिसका उपयोग किया जाता है TestNG निष्पादन सारांशों के लिए रिपोर्ट।
  • RSI <test name=”Guru 99 स्मोक टेस्ट डेमो”> टैग में एक तार्किक परीक्षण नाम होता है; रिपोर्ट इसका उपयोग पास, फेल और स्किप की संख्या के साथ-साथ कुल निष्पादन समय और समूह मेटाडेटा के लिए करती है।
  • RSI टैग टेस्ट क्लास को इंगित करता है, जहाँ com.group.guru99 पैकेज है और TC_Class1 यह क्लास का नाम है।

<!DOCTYPE सूट प्रणाली “http://testng.org/testng-1.0.dtd”>
<सूट नाम=“सुइट”>
<परीक्षण नाम="Guru 99 स्मोक टेस्ट डेमो”>
<समूहों>
<रन>
<शामिल नाम=“मजबूत_संबंध” />
</रन>
</समूहों>
<कक्षाएं>
<कक्षा नाम=“com.group.guru99.TC_Class1” />
</कक्षाएं>
</परीक्षण>
</सूट>

इस XML कॉन्फ़िगरेशन का संदर्भ अगले अनुभागों में दिए गए वीडियो वॉकथ्रू में दिया गया है।

परीक्षण XML में “बहिष्कृत करें” या “शामिल करें”

यदि छोटे फ़िल्टर के लिए समूह तंत्र जटिल लगता है, तो testng.xml सूट आपको नाम के आधार पर व्यक्तिगत परीक्षण विधियों को शामिल या बाहर करने की सुविधा भी देता है।

टैग को बाहर रखेंएक्सक्लूड टैग के लिए सिंटैक्सनिकालना नाम=“${TEST_CASE_NAME}” />
टैग शामिल करें: इंक्लूड टैग के लिए सिंटैक्सशामिल नाम=“${TEST_CASE_NAME}” />

नोट: आप एक ही रन में कई टेस्ट केस शामिल या बाहर कर सकते हैं, और यही सिंटैक्स ग्रुप फिल्टर पर भी लागू होता है।

क्रमबद्ध निष्पादन के लिए dependsOnGroups का उपयोग करना

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

  • पहले लॉगिन करें, फिर लेनदेन करें: लॉगिन विधियों को टैग करें group = "auth"और टैग स्थानांतरण परीक्षण के साथ dependsOnGroups = {"auth"}लॉगिन सफल होने के बाद ही ट्रांसफर टेस्ट चलते हैं।
  • विफलता होने पर छोड़ दें: यदि पैरेंट ग्रुप में कोई मेथड विफल हो जाता है, TestNG यह आश्रित विधियों को पूरी तरह से विफल करने के बजाय उन्हें छोड़ देने के रूप में चिह्नित करता है, जिससे रिपोर्ट सटीक बनी रहती हैं।
  • alwaysRun के साथ संयोजित करें: सफाई विधियों को निर्धारित किया जाना चाहिए alwaysRun = true इसलिए, अपस्ट्रीम समूह के विफल होने पर भी टियरडाउन प्रक्रिया चलती रहती है।

यह पैटर्न उन एंड-टू-एंड सूट के लिए आम है जहां यूआई अभिकथन शुरू होने से पहले एपीआई सेटअप पूरा होना चाहिए।

रन TestNG कोड को समूहीकृत करें, शामिल करें, बाहर निकालें (वीडियो डेमो)

नीचे इसका विस्तृत विवरण दिया गया है। Java कोड और XML सूट जो इसे संचालित करते हैं समूह बनाना, बाहर करना और शामिल करना व्यवहार.

परीक्षण परिदृश्य: लांच Guru99 डेमो बैंकिंग साइट पर, लॉगिन पेज पर कुछ तत्वों को सत्यापित करें, क्रेडेंशियल दर्ज करें, और लॉगिन करने के बाद डैशबोर्ड पर कुछ आइटमों को दोबारा सत्यापित करें।

रन TestNG समूह, शामिल करें, बाहर करें Code

नोट: प्रत्येक चरण अपने स्वयं के मेथड में मौजूद होता है, लेकिन रनटाइम पर क्रम XML सूट में मौजूद प्रविष्टियों पर निर्भर करता है।

  • विधि 1: ब्राउज़र को प्रारंभ करें और लॉन्च करें URL (tc01LaunchURL()).
  • विधि 2: लॉगिन पेज के शीर्षक की जाँच करें (tc02VerifyLaunchPage()).
  • विधि 3: लॉगिन फॉर्म पर उपयोगकर्ता नाम और पासवर्ड दर्ज करें (tc03EnterCredentials()).
  • विधि 4: उपयोगकर्ता डैशबोर्ड पर प्रबंधक आईडी की उपस्थिति सत्यापित करें (tc04VerifyLoggedInPage()).
  • विधि 5: उपयोगकर्ता डैशबोर्ड पर अतिरिक्त लिंक सत्यापित करें (tc05VerifyHyperlinks()).

Code इस परिदृश्य के लिए:

पैकेज कॉम.ग्रुप.गुरु99;

आयात जावा.util.concurrent.TimeUnit;

आयात org.openqa.सेलेनियम.बाय;
आयात org.openqa.selenium.WebDriver;
आयात org.openqa.selenium.फ़ायरफ़ॉक्स.Firefoxचालक;
आयात org.testng.Assert;
आयात org.testng.annotations.टेस्ट;

सार्वजनिक वर्ग टीसी_क्लास1 {
सार्वजनिक स्थैतिक अंतिम वेबड्राइवर वेबड्राइवर = नई Firefoxचालक();

तार launchPageHeading = “//h3[text()='Guru99 बैंक]”;
अंतिम तार उपयोगकर्ता नाम_तत्व = “//input[@name='uid']”, पासवर्ड_तत्व = “//input[@name='password']”,
signIn_element = “//input[@name='btnLogin']”;
अंतिम तार उपयोगकर्ता नाम_मान = “mngr28642”, पासवर्ड_मान = “ydAnate”;
अंतिम तार प्रबंधक आईडी = “//td[contains(text(),'मैनेजर आईडी')]”;
अंतिम तार नया ग्राहक = “//a[@href='addcustomerpage.php']”, फंड ट्रांसफर = “//a[@href='FundTransInput.php']”;

/** यह टेस्ट केस वेबड्राइवर को आरंभ करता है */
@परीक्षा(समूहों = { “बंधन”, “मजबूत_संबंध” })
सार्वजनिक शून्य tc01लॉन्चURL() {
वेबड्राइवर.मैनेज().विंडो().मैक्सिमाइज();
वेबड्राइवर.मैनेज().टाइमआउट्स().इम्प्लिसिटलीवेट(20, समय इकाई.सेकंड);
वेबड्राइवर.गेट("https://www.demo.guru99.com/V4/");
}

/** लॉगिन पेज पर हेडिंग की मौजूदगी की जाँच करता है */
@परीक्षा(समूहों = { “बंधन” })
सार्वजनिक शून्य tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
"होम पेज का शीर्षक प्रदर्शित नहीं हो रहा है");
System.out.println("होम पेज का शीर्षक प्रदर्शित हो रहा है");
}

/** उपयोगकर्ता नाम और पासवर्ड दर्ज करता है, फिर साइन इन पर क्लिक करता है */
@परीक्षा(समूहों = { “बंधन”, “मजबूत_संबंध” })
सार्वजनिक शून्य tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** डैशबोर्ड पर मैनेजर आईडी की पुष्टि करता है */
@परीक्षा(समूहों = { “मजबूत_संबंध” })
सार्वजनिक शून्य tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
“मैनेजर आईडी लेबल प्रदर्शित नहीं हो रहा है”);
System.out.println(“मैनेजर आईडी लेबल प्रदर्शित हो रहा है”);
}

/** डैशबोर्ड पर नए ग्राहक लिंक और फंड ट्रांसफर लिंक की जांच करता है */
@परीक्षा(समूहों = { “बंधन” })
सार्वजनिक शून्य tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
“नए ग्राहक का हाइपरलिंक प्रदर्शित नहीं हो रहा है”);
System.out.println(“नए ग्राहक का हाइपरलिंक प्रदर्शित हो रहा है”);

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
“फंड ट्रांसफर का हाइपरलिंक प्रदर्शित नहीं हो रहा है”);
System.out.println(“फंड ट्रांसफर का हाइपरलिंक प्रदर्शित हो रहा है”);
}
}

कृपया ध्यान दें: डेमो बैंकिंग क्रेडेंशियल लगभग 20 दिनों तक मान्य रहते हैं, इसलिए उस अवधि के समाप्त होने के बाद स्थानीय रूप से चलाने पर अमान्य क्रेडेंशियल की त्रुटि दिखाई दे सकती है।

कोड का स्पष्टीकरण:

प्रत्येक क्रिया के लिए एक, कुल पाँच परीक्षण विधियाँ हैं, जिनमें से प्रत्येक में एक groups पर विशेषता @Test एनोटेशन।

दो तार्किक समूह लेबल हैं strong_ties और bonding.

  • पहली और तीसरी विधि दोनों को ले जाती है bonding और strong_tiesइसलिए, जब भी सूट में कोई भी समूह शामिल होता है, तो वे चलते हैं। साझा के लिए यह एक सामान्य पैटर्न है। परीक्षण का मामला कदम।
  • दूसरी विधि को केवल टैग किया गया है bondingइसलिए यह केवल तभी चलता है जब bonding समूह शामिल है।
  • चौथी विधि को केवल टैग किया गया है strong_tiesइसलिए यह तभी चलता है जब वह समूह शामिल होता है।
  • पांचवीं विधि को केवल इसके साथ टैग किया गया है bondingइसलिए यह केवल तभी चलता है जब bonding समूह शामिल है।

निष्पादन के चार परिदृश्य निम्नलिखित हैं:

परिदृश्य 1: समूह की परवाह किए बिना प्रत्येक परीक्षण विधि चलाएँ। हटाएँ <groups> चल रहे XML से ब्लॉक।

परिदृश्य 2: केवल चयनित समूह से संबंधित विधियों को ही चलाएँ, अर्थात् strong_ties or bondingकृपया नीचे दिए गए वीडियो को देखें।

  • वीडियो के पहले भाग में, <groups> ब्लॉक को कमेंट आउट कर दिया गया है, इसलिए हर टेस्ट मेथड चलती है।
  • दूसरे भाग में, समूह फ़िल्टर को बहाल कर दिया जाता है, और केवल मिलान करने वाली विधियाँ ही चलती हैं।

परिदृश्य 3: चयनित टेस्ट केसों को छोड़ने के लिए एक्सक्लूड फ़िल्टर लागू करें। कृपया वीडियो देखें।

  • डेमो में शामिल नहीं है tc02 चल रहे XML में नाम से, और परिणाम रिपोर्ट पुष्टि करती है कि बहिष्कृत विधि नहीं चलती है।

परिदृश्य 4: केवल चलाने के लिए शामिल फ़िल्टर लागू करें tc01LaunchURL, tc03EnterCredentials, तथा tc05VerifyHyperlinksकृपया वीडियो देखें।

इस रन में, केवल इनक्लूड फ़िल्टर में सूचीबद्ध विधियाँ ही, ठीक उसी प्रकार निष्पादित होती हैं जैसे कॉन्फ़िगर की गई हैं।

नीचे दिए गए लिंक से सैंपल प्रोजेक्ट डाउनलोड करें।

ऊपर दिए गए लिंक को डाउनलोड करें Code

निष्कर्ष

में समूह TestNG बड़े पैमाने पर संरचना लाना Selenium और एक बार के क्लास स्प्लिट्स को डिक्लेरेटिव XML फिल्टर से बदलकर यूनिट सूट्स को बेहतर बनाया जा सकता है।

अपने तरीकों को टैग करें @Test(groups = {...}), तब उपयोग करें <include>, <exclude>, तथा dependsOnGroups स्मोक, रिग्रेशन और एंड-टू-एंड रन को एक ही मेवन प्रोजेक्ट से चलाने के लिए TestNG 7.x।

अक्सर पूछे जाने वाले प्रश्न

एक समूह एक तार्किक लेबल है जो परीक्षण विधि से जुड़ा होता है। groups पर विशेषता @Testइसके बाद XML सूट शामिल करने और बाहर करने वाले फ़िल्टरों का उपयोग करके समूहों का चयन करता है, इसलिए आप रनटाइम पर तय करते हैं कि कौन से टैग किए गए तरीके निष्पादित होंगे।

इनसाइड <groups><run>, <include name="..."> रन के लिए टैग श्वेतसूची समूह, और <exclude name="..."> उन्हें रोकता है। TestNG 'एक्सक्लूड्स' लागू करने से 'इनक्लूड्स' के बाद एक एक्सक्लूडेड ग्रुप आता है, इसलिए एक्सक्लूडेड ग्रुप को हमेशा छोड़ दिया जाता है, भले ही वह 'इनक्लूड' में भी सूचीबद्ध हो।

RSI dependsOnGroups पर विशेषता @Test बल TestNG आश्रित विधि शुरू होने से पहले सूचीबद्ध समूह की प्रत्येक विधि को चलाएँ। यदि कोई पूर्व-आवश्यक विधि विफल हो जाती है, TestNG यह आश्रित विधि को विफल के बजाय छोड़े गए के रूप में चिह्नित करता है।

हाँ। groups एट्रिब्यूट एक ऐरे स्वीकार करता है, इसलिए @Test(groups = {"smoke", "regression"}) एक ही विधि को दोनों समूहों में रखा जाता है। TestNG यह विधि तब चलती है जब दोनों में से कोई भी समूह सूट में शामिल होता है, जिससे साझा चरण DRY (ड्राई-फ्री) बने रहते हैं।

TestNG 7.x वर्तमान मेंटेन की गई लाइन है, जिसके अंतर्गत रिलीज़ जारी की गई हैं। org.testng:testng Maven समन्वय स्थापित करता है। यह समूहों, समानांतर निष्पादन और श्रोताओं को आधुनिक प्रणालियों के साथ पूरी तरह से संगत रखता है। Selenium 4 और जेडीके 17 परियोजनाएं।

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

हाँ। एआई क्लस्टरिंग एल्गोरिदम ऐतिहासिक विफलता लॉग पढ़ते हैं, अस्थिर परीक्षणों को चिह्नित करते हैं, और एक स्थिर उपसमूह प्रस्तावित करते हैं जिसे टैग किया गया है। regressionइंजीनियर सूची को मंजूरी देते हैं, फिर TestNG यह समूह हर रात उस प्रक्रिया को जारी रखता है, जिससे कवरेज खोए बिना सूट को सुव्यवस्थित रखा जा सकता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: