Exécution parallèle dans Selenium
Pour comprendre comment exécuter des scripts en parallèle, commençons par comprendre
Pourquoi avons-nous besoin de la gestion de session ?
Pendant l'exécution du test, le Selenium WebDriver doit interagir à tout moment avec le navigateur pour exécuter des commandes données. Au moment de l'exécution, il est également possible qu'avant la fin de l'exécution en cours, quelqu'un d'autre démarre l'exécution d'un autre script, sur la même machine et dans le même type de navigateur.
Dans une telle situation, nous avons besoin d’un mécanisme par lequel nos deux exécutions différentes ne se chevauchent pas. Ceci peut être réalisé en utilisant la gestion de session dans Selenium.
Comment réaliser la gestion de session dans Selenium Pilote Web ?
Si vous vérifiez le code source de Selenium WebDriver, vous trouverez une variable nommée 'sessionId'. Chaque fois que nous créons une nouvelle instance d'un objet WebDriver, un nouveau « sessionId » sera généré et attaché à ce particulier. Firefox/Chrome/IE Pilote ().
Donc, tout ce que nous ferons après cela ne sera exécuté que dans ce domaine particulier. Firefox session de navigateur.
Comme il s'agit d'une fonctionnalité intégrée, il n'est pas explicitement nécessaire d'attribuer l'identifiant de session.
Exemple de code: Ici, deux sessions différentes seront générées pour deux WebDriver différents.
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(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("https://demo.guru99.com/V4/"); } }
Comment exécuter des tests parallèles avec Selenium
Il existe des situations dans lesquelles vous souhaitez exécuter plusieurs tests en même temps.
Dans de tels cas, on peut utiliser l'attribut « parallèle »
L'attribut parallèle de la balise suite peut accepter quatre valeurs :
tests | Tous les cas de test à l'intérieur étiquette de USP,EP, BP Le fichier XML s'exécutera en parallèle. |
les classes | Tous les cas de test dans un Java la classe se déroulera en parallèle |
méthodes | Toutes les méthodes avec l'annotation @Test s'exécuteront en parallèle. |
cas | Les cas de test dans la même instance s'exécuteront en parallèle, mais deux méthodes de deux instances différentes s'exécuteront dans des threads différents. |
L'attribut thread-count vous permet de spécifier combien de threads doivent être alloués pour cette exécution.
Exemple complet : dans cet exemple, trois scénarios de test s'exécuteront en parallèle et rempliront les données de connexion. https://demo.guru99.com/
Le projet complet ressemblera à :
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find 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(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it 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"> </class> </classes> </test> </suite>
Ordre et dépendance des cas de test
Vous pouvez définir l'ordre et la dépendance de Cas de test exécution.
Supposons que vous ayez deux scénarios de test, « testGuru99TC1 » et « testGuru99TC2 » et que vous souhaitiez exécuter le scénario de test « testGuru99TC2 » avant « testGuru99TC1 ». Dans ce cas, nous utiliserons l'attribut 'dependsOnMethods' pour créer la dépendance et l'ordre d'exécution.
<?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 value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
Résumé
- Un nouveau sessionID est créé pour une nouvelle instance de WebDriver.
- Une session sera liée à un navigateur particulier.
- En utilisant l'attribut thread et parallel, vous exécutez vos scripts en parallèle.
- Vous pouvez utiliser la dépendance d'attribut pour définir l'ordre de test de l'exécution