Rinnakkaissuoritus sisään Selenium

⚡ Älykäs yhteenveto

Istunnot, rinnakkaisajo ja riippuvuudet Selenium yhdistää yksilöllisen istuntotunnuksen WebDriver-instanssia kohden TestNG sviittiohjaimia, joiden avulla useat selainikkunat voivat suorittaa itsenäisiä tai järjestettyjä komentosarjoja samanaikaisesti ja viimeistellä regressiosyklin nopeammin.

  • 🧩 Pääperiaate: Jokainen uusi WebDriver-instanssi luo uuden istuntotunnuksen, joten kaksi ajuria ei koskaan jaa komentoja tai evästeitä samalla koneella.
  • ⚙️ toteutus: Aseta parallel=”methods” (tai tests, classs, instance) sekä thread-count-arvo TestNG testng.xml-tiedoston suite-tagi suorituksen jakamiseksi.
  • 🧵 yhdensuuntaisuus: Käytä yhtä WebDriver-ohjainta per @Test-metodi välttääksesi kilpailutilanteet jaetuissa selainikkunoissa samanaikaisten suoritusten aikana.
  • 🔗 Riippuvuus: Jos dependsOnMethods-metodeja on tarpeen edeltää, lisää testng.xml-tiedoston sisällä oleviin järjestyksen testeihin tägit tai @Test-annotaatio.
  • 🤖 Tekoälyn käyttö: Nykyaikaiset tekoälyapulaiset ennustavat optimaalisen säikeiden määrän, ryhmittelevät turvallisia rinnakkaismetodeja ja tunnistavat epävakaita ehdokkaita historiallisten suoritustietojen perusteella.

Kuinka suorittaa rinnakkainen suoritus Selenium

Ymmärtääksesi, miten skriptejä suoritetaan rinnakkain, sinun on ensin tiedettävä miten Selenium eristää jokaisen selaimen istuntojen mukaan.

Miksi tarvitsemme istunnonkäsittelyä?

Testin suorittamisen aikana Selenium WebDriverin on oltava vuorovaikutuksessa selaimen kanssa jokaisessa vaiheessa suorittaakseen annettuja komentoja. Testin ollessa käynnissä toinen käyttäjä voi käynnistää toisen skriptin samalla koneella ja samantyyppisellä selaimella.

Istunnon käsittely

Tällaisessa tilanteessa tarvitsemme mekanismin, jotta kaksi toteutusta eivät mene päällekkäin. Selenium ratkaisee tämän istunnonkäsittelyn avulla.

Kuinka saavuttaa istunnon käsittely Selenium WebDriver?

Jos tarkastat Selenium WebDriver-lähdekoodista löydät muuttujan nimeltä sessionIdJoka kerta, kun luot uuden WebDriver-instanssin, uusi sessionId se luodaan ja liitetään siihen Firefox, Chrome- tai IE-ohjain.

Saavuta istunnon hallinta Selenium web-ajuri

Jokainen seuraava komento suoritetaan vain kyseisen selainistunnon sisällä.

Saavuta istunnon hallinta Selenium web-ajuri

Koska tämä on sisäänrakennettu WebDriveriin, istuntotunnusta ei tarvitse määrittää manuaalisesti.

Code Esimerkiksi: Kaksi eri istuntoa luodaan kahdelle WebDriver-instanssille.

Istuntokäsittely.java
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/");
    }
}

Kuinka suorittaa rinnakkaistestejä Selenium

On tilanteita, joissa haluat suorittaa useita testejä samanaikaisesti, kuten selainten väliset tarkistukset tai suuria savuhuoneita.

Tällaisissa tapauksissa parallel attribuutti TestNG suite-tunniste hoitaa homman.

Suorita rinnakkaistestit kanssa Selenium

Suite-tagin parallel-attribuutti hyväksyy neljä arvoa:

Attribuutin arvoMerkitys
testitKaikki testitapaukset sisällä tagi testaus XML-tiedosto ajetaan rinnakkain.
luokatKaikki testitapaukset a:n sisällä Java luokka kulkee rinnakkain.
menetelmätKaikki @Test-merkinnällä annotoidut metodit suoritetaan rinnakkain.
tapauksiaSaman instanssin testit suoritetaan rinnakkain, kun taas kahden eri instanssin kaksi metodia suoritetaan eri säikeissä.

thread-count attribuutti määrittää, kuinka monta säiettä kyseiselle suoritukselle varataan. Yhdistä se -attribuutin kanssa TestNG puitteet ja asentaa TestNG in Eclipse ennen suorittamista. Yhden koneen ulkopuolelle skaalautumiseksi reititä sama sarja Selenium Ruudukko 4 hajautettua rinnakkaissuoritusta varten.

Täydellinen esimerkki: kolme testitapausta suoritetaan rinnakkain ja täyttävät kirjautumistiedot https://demo.guru99.com/.

Koko projekti näyttää tältä:

Suorita rinnakkaistestit kanssa Selenium

TestiGuru99MultipleSession.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.XML

testng.xml (rinnakkaismetodit)
<?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>

Testitapausten järjestys ja riippuvuus

Voit asettaa järjestyksen ja riippuvuuden testitapaus suoritus. Oletetaan, että sinulla on kaksi testitapausta, testGuru99TC1 ja testGuru99TC2, ja haluat testGuru99TC2 juosta ennen testGuru99TC1. Käytä dependsOnMethods attribuutti (tai dependsOnGroups ryhmätason ketjutusta varten) järjestyksen korjaamiseksi. Laajemmille automaatiokehys suunnittele, vertaa JUnit vs TestNGja tarkista findElement viittaus, jos riippuvaisilla testeilläsi on yhteisiä paikantimia.

testng.xml (riippuu menetelmistä)
<?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>

TestNG ajonaikainen, isännöity osoitteessa testingng.org, arvioi nämä määrittelyt ennen säikeiden käynnistämistä, joten riippuvat metodit käynnistyvät aina niiden ennakkoedellytysten täyttymisen jälkeen.

UKK

Istunto on yksilöllinen istuntotunnus, joka luodaan aina, kun uusi WebDriver-instanssi luodaan. Jokainen ajurin komento reitittää vastaavaan selainistuntoon, eristäen yhden testin toisesta.

Suite-tagin parallel-attribuutti hyväksyy testejä, luokkia, metodeja tai instansseja. TestNG käynnistää useita säikeitä (säikeiden määrän mukaan) ja suorittaa valitun yksikön samanaikaisesti, mikä lyhentää kokonaissuoritusaikaa.

Käytä dependsOnMethods-attribuuttia testng.xml-tiedoston include-tagin sisällä tai @Test(dependsOnMethods = “name”) -metodia koodissa. TestNG suorittaa ensin edellytyksen ja ohittaa riippuvan testin epäonnistuessa.

Tekoälytyökalut klusteroivat toisiinsa liittyviä testejä, ennustavat optimaalisen säikeiden määrän aiempien suoritusympäristöjen perusteella ja järjestävät testipaketit uudelleen siten, että hitaat testit alkavat ensin, mikä lyhentää koontiputken kokonaiskestoa.

Kyllä. Tekoäly jäsentää kutsukaavioita ja historiallisia virhelokeja ehdottaakseen dependsOnMethods-linkkejä, merkitäkseen kehäriippuvuuksia ja ehdottaakseen turvallisia rinnakkaisryhmiä, mikä vähentää testng.xml-tiedoston manuaalista ylläpitoa.

Tiivistä tämä viesti seuraavasti: