Parallelle uitvoering in Selenium
โก Slimme samenvatting
Sessies, parallelle uitvoering en afhankelijkheden in Selenium combineer een unieke sessionId per WebDriver-instantie met TestNG Suite-besturingselementen maken het mogelijk om meerdere browservensters tegelijk onafhankelijke of geordende scripts te laten uitvoeren, waardoor de regressietest sneller wordt voltooid.

Om te begrijpen hoe je scripts parallel kunt uitvoeren, moet je eerst weten hoe Selenium isoleert elke browser via sessies.
Waarom hebben we sessieafhandeling nodig?
Tijdens de testuitvoering wordt de Selenium WebDriver moet bij elke stap met de browser communiceren om de gegeven commando's uit te voeren. Terwijl die test draait, kan een andere gebruiker een tweede script starten op dezelfde machine en met hetzelfde type browser.
In zo'n situatie hebben we een mechanisme nodig om te voorkomen dat de twee uitvoeringen elkaar overlappen. Selenium Dit wordt opgelost door middel van sessiebeheer.
Hoe u Sessieafhandeling kunt bereiken Selenium WebDriver?
Als u de inspecteert Selenium In de broncode van WebDriver vindt u een variabele genaamd sessionIdElke keer dat u een nieuwe WebDriver-instantie aanmaakt, wordt er een nieuwe sessionId wordt gegenereerd en daaraan gekoppeld Firefox, Chrome- of IE-stuurprogramma.
Elke volgende opdracht wordt alleen uitgevoerd binnen die specifieke browsersessie.
Omdat dit ingebouwd is in WebDriver, is het niet nodig om de sessionId handmatig toe te wijzen.
Code Voorbeeld: Er worden twee verschillende sessies gegenereerd voor twee WebDriver-instanties.
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/"); } }
Parallelle tests uitvoeren met Selenium
Er zijn situaties waarin je meerdere tests tegelijk wilt uitvoeren, bijvoorbeeld: cross-browser controles of grote rookkamers.
In dergelijke gevallen is de parallel attribuut op het TestNG Suitetag doet het werk.
Het parallel-attribuut van de suite-tag accepteert vier waarden:
| Attribuutwaarde | Betekenis |
|---|---|
| testen | Alles testgevallen binnenin een label van de het testen van XML-bestand wordt parallel uitgevoerd. |
| klassen | Alle testgevallen binnen een Java De lessen worden parallel uitgevoerd. |
| methoden | Alle methoden die zijn geannoteerd met @Test worden parallel uitgevoerd. |
| gevallen | Tests binnen dezelfde instantie worden parallel uitgevoerd, terwijl twee methoden van twee verschillende instanties in verschillende threads draaien. |
De thread-count Dit attribuut bepaalt hoeveel threads er voor die uitvoering worden toegewezen. Combineer het met de TestNG kader en installeren TestNG in Eclipse voordat u het uitvoert. Voor schaalvergroting naar meer dan รฉรฉn machine kunt u dezelfde suite via de volgende route laten lopen. Selenium Grid 4 voor gedistribueerde parallelle uitvoering.
Volledig voorbeeld: drie testgevallen worden parallel uitgevoerd en vullen inloggegevens in. https://demo.guru99.com/.
Het complete project ziet er als volgt uit:
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
<?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>
Testcasevolgorde en afhankelijkheid
Je kunt de volgorde en afhankelijkheid instellen. testcase uitvoering. Stel dat je twee testgevallen hebt, testGuru99TC1 en testGuru99TC2, en jij wilt testGuru99TC2 om te rennen voordat testGuru99TC1. Gebruik de dependsOnMethods attribuut (of dependsOnGroups voor ketenvorming op groepsniveau) om die volgorde vast te leggen. Voor bredere automatiseringsraamwerk ontwerp, vergelijk JUnit vs TestNG, en bekijk de element vinden Raadpleeg deze referentie als uw afhankelijke tests dezelfde locators delen.
<?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>
De TestNG runtime, gehost op testng.orgevalueert deze declaraties voordat threads worden gestart, zodat afhankelijke methoden altijd pas beginnen nadat aan hun vereisten is voldaan.





