समानांतर निष्पादन Selenium

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

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

  • 🧩 मुख्य सिद्धांत: वेबड्राइवर का प्रत्येक नया इंस्टेंस एक नया सेशनआईडी उत्पन्न करता है, इसलिए एक ही मशीन पर दो ड्राइवर कभी भी कमांड या कुकीज़ साझा नहीं करते हैं।
  • ⚙️ कार्यान्वयन: parallel=”methods” (या tests, classes, instances) plus thread-count को सेट करें TestNG testng.xml में suite टैग का उपयोग निष्पादन को फैलाने के लिए किया जाता है।
  • 🧵 समानांतरवाद: समवर्ती रन के दौरान साझा ब्राउज़र विंडो पर रेस कंडीशन से बचने के लिए प्रत्येक @Test विधि के लिए एक WebDriver का उपयोग करें।
  • 🔗 निर्भरता: testng.xml में dependsOnMethods के साथ ऑर्डर किए गए परीक्षणों में, जब एक विधि को दूसरी विधि से पहले आना आवश्यक हो, तो टैग या @Test एनोटेशन शामिल करें।
  • 🤖 एआई का उपयोग: आधुनिक एआई सहायक इष्टतम थ्रेड-संख्या का अनुमान लगाते हैं, सुरक्षित समानांतर विधियों को समूहित करते हैं, और ऐतिहासिक रन डेटा से अस्थिर उम्मीदवारों को उजागर करते हैं।

समानांतर निष्पादन कैसे करें Selenium

स्क्रिप्ट को समानांतर रूप से चलाने का तरीका समझने के लिए, आपको सबसे पहले यह जानना होगा कि कैसे Selenium यह सत्रों के माध्यम से प्रत्येक ब्राउज़र को अलग करता है।

हमें सत्र प्रबंधन की आवश्यकता क्यों है?

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

सत्र प्रबंधन

ऐसी स्थिति में, हमें एक ऐसे तंत्र की आवश्यकता है जिससे दोनों निष्पादन एक दूसरे के साथ ओवरलैप न हों। Selenium यह समस्या सेशन हैंडलिंग के माध्यम से हल हो जाती है।

सत्र प्रबंधन कैसे प्राप्त करें? Selenium वेबड्राइवर?

यदि आप निरीक्षण करते हैं Selenium WebDriver सोर्स में, आपको एक वेरिएबल मिलेगा जिसे कहा जाता है sessionIdहर बार जब आप एक नया वेबड्राइवर इंस्टेंस बनाते हैं, तो एक नया sessionId उत्पन्न होता है और उससे जुड़ जाता है Firefoxक्रोम या आईई ड्राइवर।

सत्र प्रबंधन प्राप्त करें Selenium वेबड्राइवर

इसके बाद आने वाला प्रत्येक कमांड केवल उसी विशेष ब्राउज़र सत्र के भीतर चलता है।

सत्र प्रबंधन प्राप्त करें Selenium वेबड्राइवर

क्योंकि यह वेबड्राइवर में अंतर्निहित है, इसलिए सेशनआईडी को मैन्युअल रूप से असाइन करने की कोई आवश्यकता नहीं है।

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 सूट टैग ही यह काम करता है।

समानांतर परीक्षण चलाएँ Selenium

सूट टैग का पैरेलल एट्रीब्यूट चार मान स्वीकार करता है:

मान बताइएअर्थ
परीक्षणसब परीक्षण के मामलों अंदर का टैग परीक्षण XML फाइल समानांतर रूप से चलती है।
कक्षाएंएक के भीतर सभी परीक्षण मामले Java क्लास समानांतर रूप से चलती है।
तरीकों@Test एनोटेशन वाले सभी मेथड समानांतर रूप से निष्पादित होते हैं।
उदाहरणोंएक ही इंस्टेंस में परीक्षण समानांतर रूप से चलते हैं, जबकि दो अलग-अलग इंस्टेंस के दो तरीके अलग-अलग थ्रेड्स में चलते हैं।

RSI thread-count यह विशेषता निर्धारित करती है कि उस निष्पादन के लिए कितने थ्रेड आवंटित किए जाएंगे। इसे इसके साथ जोड़ें। TestNG ढांचा और स्थापित TestNG in Eclipse चलाने से पहले। एक मशीन से अधिक स्केल के लिए, उसी सूट को इसके माध्यम से रूट करें। Selenium ग्रिड 4 वितरित समानांतर निष्पादन के लिए।

पूर्ण उदाहरण: तीन टेस्ट केस समानांतर रूप से चलते हैं और लॉगिन डेटा भरते हैं। https://demo.guru99.com/.

पूरी परियोजना इस प्रकार दिखती है:

समानांतर परीक्षण चलाएँ Selenium

टेस्टGuru99MultipleSession.java
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.एक्सएमएल

testng.xml (समानांतर विधियाँ)
<?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 यदि आपके आश्रित परीक्षण लोकेटर साझा करते हैं तो संदर्भ दें।

testng.xml (dependsOnMethods)
<?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यह थ्रेड्स लॉन्च करने से पहले इन घोषणाओं का मूल्यांकन करता है, इसलिए आश्रित विधियाँ हमेशा अपनी पूर्व-आवश्यकताओं के समाप्त होने के बाद ही शुरू होती हैं।

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

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

सूट टैग पर मौजूद पैरेलल एट्रीब्यूट टेस्ट, क्लास, मेथड या इंस्टेंस को स्वीकार करता है। TestNG यह कई थ्रेड्स (थ्रेड-काउंट द्वारा निर्धारित) उत्पन्न करता है और चयनित इकाई को एक साथ चलाता है, जिससे कुल निष्पादन समय कम हो जाता है।

testng.xml के include टैग के अंदर dependsOnMethods एट्रिब्यूट का उपयोग करें, या कोड में @Test(dependsOnMethods = “name”) का उपयोग करें। TestNG यह पहले आवश्यक शर्त को पूरा करता है और विफल होने पर आश्रित परीक्षण को छोड़ देता है।

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

जी हां। एआई कॉल ग्राफ़ और ऐतिहासिक विफलता लॉग का विश्लेषण करके dependsOnMethods लिंक सुझाता है, चक्रीय निर्भरताओं को चिह्नित करता है और सुरक्षित समानांतर समूहों का प्रस्ताव देता है, जिससे testng.xml के मैन्युअल रखरखाव में कमी आती है।

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