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

स्क्रिप्ट को समानांतर रूप से चलाने का तरीका समझने के लिए, आपको सबसे पहले यह जानना होगा कि कैसे Selenium यह सत्रों के माध्यम से प्रत्येक ब्राउज़र को अलग करता है।
हमें सत्र प्रबंधन की आवश्यकता क्यों है?
परीक्षण निष्पादन के दौरान, Selenium दिए गए कमांड को निष्पादित करने के लिए वेबड्राइवर को हर चरण में ब्राउज़र के साथ इंटरैक्ट करना पड़ता है। जब वह परीक्षण चल रहा होता है, तो कोई अन्य उपयोगकर्ता उसी मशीन और उसी प्रकार के ब्राउज़र पर दूसरी स्क्रिप्ट लॉन्च कर सकता है।
ऐसी स्थिति में, हमें एक ऐसे तंत्र की आवश्यकता है जिससे दोनों निष्पादन एक दूसरे के साथ ओवरलैप न हों। Selenium यह समस्या सेशन हैंडलिंग के माध्यम से हल हो जाती है।
सत्र प्रबंधन कैसे प्राप्त करें? Selenium वेबड्राइवर?
यदि आप निरीक्षण करते हैं Selenium WebDriver सोर्स में, आपको एक वेरिएबल मिलेगा जिसे कहा जाता है sessionIdहर बार जब आप एक नया वेबड्राइवर इंस्टेंस बनाते हैं, तो एक नया sessionId उत्पन्न होता है और उससे जुड़ जाता है Firefoxक्रोम या आईई ड्राइवर।
इसके बाद आने वाला प्रत्येक कमांड केवल उसी विशेष ब्राउज़र सत्र के भीतर चलता है।
क्योंकि यह वेबड्राइवर में अंतर्निहित है, इसलिए सेशनआईडी को मैन्युअल रूप से असाइन करने की कोई आवश्यकता नहीं है।
Code उदाहरण: दो वेबड्राइवर इंस्टेंस के लिए दो अलग-अलग सेशन जेनरेट किए जाते हैं।
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String... strings) { // First session of WebDriver WebDriver driver = new FirefoxDriver(); // Go to guru99 demo site driver.get("https://demo.guru99.com/V4/"); // Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); // Go to guru99 demo site driver2.get("https://demo.guru99.com/V4/"); } }
समानांतर परीक्षण कैसे चलाएँ? Selenium
कुछ ऐसी स्थितियाँ होती हैं जहाँ आप एक ही समय में कई परीक्षण चलाना चाहते हैं, जैसे कि क्रॉस-ब्राउज़र जाँच या बड़े स्मोक रूम।
ऐसे मामलों में, parallel पर विशेषता TestNG सूट टैग ही यह काम करता है।
सूट टैग का पैरेलल एट्रीब्यूट चार मान स्वीकार करता है:
| मान बताइए | अर्थ |
|---|---|
| परीक्षण | सब परीक्षण के मामलों अंदर का टैग परीक्षण XML फाइल समानांतर रूप से चलती है। |
| कक्षाएं | एक के भीतर सभी परीक्षण मामले Java क्लास समानांतर रूप से चलती है। |
| तरीकों | @Test एनोटेशन वाले सभी मेथड समानांतर रूप से निष्पादित होते हैं। |
| उदाहरणों | एक ही इंस्टेंस में परीक्षण समानांतर रूप से चलते हैं, जबकि दो अलग-अलग इंस्टेंस के दो तरीके अलग-अलग थ्रेड्स में चलते हैं। |
RSI thread-count यह विशेषता निर्धारित करती है कि उस निष्पादन के लिए कितने थ्रेड आवंटित किए जाएंगे। इसे इसके साथ जोड़ें। TestNG ढांचा और स्थापित TestNG in Eclipse चलाने से पहले। एक मशीन से अधिक स्केल के लिए, उसी सूट को इसके माध्यम से रूट करें। Selenium ग्रिड 4 वितरित समानांतर निष्पादन के लिए।
पूर्ण उदाहरण: तीन टेस्ट केस समानांतर रूप से चलते हैं और लॉगिन डेटा भरते हैं। https://demo.guru99.com/.
पूरी परियोजना इस प्रकार दिखती है:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executeSessionOne() { // First session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); // Find the user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo() { // Second session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executeSessionThree() { // Third session of WebDriver System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.एक्सएमएल
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"/> </classes> </test> </suite>
परीक्षण केस क्रम और निर्भरता
आप क्रम और निर्भरता निर्धारित कर सकते हैं परीक्षण का मामला निष्पादन। मान लीजिए आपके पास दो टेस्ट केस हैं, testGuru99TC1 और testGuru99TC2, और आप चाहते हैं testGuru99TC2 पहले चलाने के लिए testGuru99TC1। उपयोग dependsOnMethods विशेषता (या dependsOnGroups समूह-स्तरीय श्रृंखला के लिए) उस क्रम को ठीक करने के लिए। व्यापक स्तर पर स्वचालन ढांचा डिजाइन, तुलना JUnit vs TestNG, और समीक्षा करें findElement यदि आपके आश्रित परीक्षण लोकेटर साझा करते हैं तो संदर्भ दें।
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods"> <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/> <include name="testGuru99TC2"/> </class> </classes> </test> </suite>
RSI TestNG रनटाइम, पर होस्ट किया गया testng.orgयह थ्रेड्स लॉन्च करने से पहले इन घोषणाओं का मूल्यांकन करता है, इसलिए आश्रित विधियाँ हमेशा अपनी पूर्व-आवश्यकताओं के समाप्त होने के बाद ही शुरू होती हैं।





