Paralelní provedení v Selenium

⚡ Chytré shrnutí

Relace, paralelní běh a závislost v Selenium kombinovat jedinečné ID relace pro každou instanci WebDriveru s TestNG ovládací prvky sady, které umožňují spouštět nezávislé nebo seřazené skripty v mnoha oknech prohlížeče najednou a rychleji dokončit regresní cyklus.

  • 🧩 Klíčový princip: Každá nová instance WebDriveru generuje nové SessionId, takže dva ovladače nikdy nesdílejí příkazy ani soubory cookie na stejném počítači.
  • ⚙️ Realizace: Nastavte parallel=”methods” (nebo testy, třídy, instance) plus thread-count na TestNG Tag sady testng.xml pro rozdělení provádění.
  • 🧵 Rovnoběžnost: Použijte jeden WebDriver na metodu @Test, abyste se vyhnuli soubojovým podmínkám ve sdílených oknech prohlížeče během souběžných běhů.
  • 🔗 Závislost: Seřadit testy s dependsOnMethods uvnitř testng.xml include tagy nebo anotaci @Test, když jedna metoda musí předcházet jiné.
  • 🤖 Použití umělé inteligence: Moderní pomocníci s umělou inteligencí předpovídají optimální počet vláken, bezpečné paralelní metody pro skupiny a vyhledávají nestabilní kandidáty z historických dat běhů.

Jak spustit paralelní provádění v Selenium

Abyste pochopili, jak spouštět skripty paralelně, musíte nejprve vědět, jak... Selenium izoluje každý prohlížeč prostřednictvím relací.

Proč potřebujeme Zpracování relací?

Během provádění testu, Selenium WebDriver musí v každém kroku interagovat s prohlížečem, aby mohl provádět zadané příkazy. Během testování může jiný uživatel spustit druhý skript na stejném počítači a ve stejném typu prohlížeče.

Zpracování relace

V takové situaci potřebujeme mechanismus, aby se obě provedení nepřekrývala. Selenium řeší to pomocí zpracování relací.

Jak dosáhnout Zpracování relace v Selenium WebDriver?

Pokud prohlédnete Selenium Ve zdrojovém kódu WebDriveru najdete proměnnou s názvem sessionIdPokaždé, když vytvoříte novou instanci WebDriveru, vytvoří se nová sessionId je generován a k němu připojen Firefox, Chrome nebo ovladač pro IE.

Dosáhněte zpracování relace Selenium webový ovladač

Každý následující příkaz se spustí pouze v rámci dané relace prohlížeče.

Dosáhněte zpracování relace Selenium webový ovladač

Protože je to integrováno do WebDriveru, není nutné ručně přiřazovat SessionId.

Code Příklad: Pro dvě instance WebDriveru se generují dvě různé relace.

SessionHandling.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/");
    }
}

Jak spouštět paralelní testy s Selenium

Existují situace, kdy chcete spustit více testů najednou, například kontroly napříč prohlížeči nebo velké kuřácké apartmány.

V takových případech je parallel atribut na TestNG Značka suite dělá práci.

Spusťte paralelní testy s Selenium

Atribut parallel tagu suite přijímá čtyři hodnoty:

Hodnota atributuVýznam
TestyVše testovací případy uvnitř štítek Testování XML soubor spouštěný paralelně.
třídyVšechny testovací případy uvnitř Java třída probíhá paralelně.
metodyVšechny metody anotované pomocí @Test se provádějí paralelně.
instanceTesty ve stejné instanci běží paralelně, zatímco dvě metody dvou různých instancí běží v různých vláknech.

Jedno thread-count Atribut určuje, kolik vláken je alokováno pro dané spuštění. Spárujte ho s atributem TestNG rámec a instalovat TestNG in Eclipse před spuštěním. Pro škálování nad rámec jednoho počítače směrujte stejnou sadu přes Selenium Mřížka 4 pro distribuované paralelní provádění.

Kompletní příklad: tři testovací případy běží paralelně a vyplňují přihlašovací údaje na https://demo.guru99.com/.

Kompletní projekt vypadá takto:

Spusťte paralelní testy s Selenium

testGuru99MultipleSession.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 (paralelní metody)
<?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>

Pořadí a závislost testovacího případu

Můžete nastavit pořadí a závislost modelový případ provedení. Předpokládejme, že máte dva testovací případy, testGuru99TC1 a testGuru99TC2a ty chceš testGuru99TC2 běžet před testGuru99TC1. Použijte dependsOnMethods atribut (nebo dependsOnGroups pro řetězení na úrovni skupiny) k opravě tohoto pořadí. Pro širší automatizační rámec návrh, porovnání JUnit vs TestNGa zkontrolujte najítPrvek reference, pokud vaše závislé testy sdílejí lokátory.

testng.xml (závisí na metodách)
<?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>

Jedno TestNG běhové prostředí, hostované na adrese testng.org, vyhodnocuje tyto deklarace před spuštěním vláken, takže závislé metody vždy začínají až po skončení jejich předpokladů.

Nejčastější dotazy

Relace je jedinečné ID relace (SessionId), které se generuje při každém vytvoření nové instance WebDriveru. Každý příkaz z daného ovladače směruje do odpovídající relace prohlížeče, čímž se izolují jednotlivé testy od sebe.

Atribut parallel na značce suite přijímá testy, třídy, metody nebo instance. TestNG Spouští více vláken (nastavených počtem vláken) a spustí vybranou jednotku souběžně, čímž se zkrátí celková doba provádění.

Použijte atribut dependsOnMethods uvnitř tagu include souboru testng.xml nebo @Test(dependsOnMethods = “name”) v kódu. TestNG Nejprve spustí předpoklad a v případě selhání přeskočí závislý test.

Nástroje umělé inteligence shlukují testy související s klastrováním, predikují optimální počet vláken z minulých běhových prostředí a mění pořadí sad tak, aby pomalé testy začínaly jako první, čímž se zkracuje celkový čas na sestavení.

Ano. Umělá inteligence analyzuje grafy volání a historické protokoly selhání, aby navrhla odkazy dependsOnMethods, označila cyklické závislosti a navrhla bezpečné paralelní skupiny, čímž se snižuje ruční údržba souboru testng.xml.

Shrňte tento příspěvek takto: