Pour comprendre comment exécuter des scripts en parallèle, comprenons d'abord
Pourquoi avons-nous besoin de la gestion de session?
Pendant l'exécution du test, le Selenium WebDriver doit interagir en permanence avec le navigateur pour exécuter les 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 commence l'exécution d'un autre script, dans 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 devraient pas se chevaucher. Ceci peut être réalisé en utilisant la gestion de session dans Selenium.
Comment réaliser la gestion de session dans Selenium WebDriver?
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 nouvel 'sessionId' sera généré et attaché avec ce pilote Firefox / Chrome / IE particulier ().
Donc, tout ce que nous faisons après cela ne s'exécutera que dans cette session particulière du navigateur Firefox.
Comme il s'agit d'une fonctionnalité intégrée, il n'y a pas besoin explicite d'attribuer l'ID 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;classe publique SessionHandling {public static void main (String… strings) {// Première session de WebDriverPilote WebDriver = nouveau FirefoxDriver ();// Accéder au site guru99driver.get ("http://demo.guru99.com/V4/");// Deuxième session de WebDriverWebDriver driver2 = nouveau FirefoxDriver ();// Accéder au site guru99driver2.get ("http://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 "parallel"
L'attribut parallel de la balise suite peut accepter quatre valeurs:
des tests | Tous les cas de test à l'intérieur de la balise |
Des classes | Tous les cas de test à l'intérieur d'une classe Java s'exécuteront en parallèle |
méthodes | Toutes les méthodes avec l'annotation @Test s'exécuteront en parallèle. |
les instances | 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 un thread différent. |
L'attribut thread-count vous permet de spécifier le nombre de threads à allouer pour cette exécution.
Exemple complet: dans cet exemple, trois cas de test s'exécuteront en parallèle et rempliront les données de connexion dans http://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 {@Testpublic void executSessionOne () {// Première session de WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();// Accéder au site guru99driver.get ("http://demo.guru99.com/V4/");// trouve la zone de texte du nom d'utilisateur et la remplitdriver.findElement (Par.nom ("uid")). sendKeys ("Pilote 1");}@Testpublic void executeSessionTwo () {// Deuxième session de WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();// Accéder au site guru99driver.get ("http://demo.guru99.com/V4/");// trouve la zone de texte du nom d'utilisateur et la remplitdriver.findElement (Par.nom ("uid")). sendKeys ("Pilote 2");}@Testpublic void executSessionThree () {// Troisième session de WebDriverSystem.setProperty ("webdriver.chrome.driver", "chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();// Accéder au site guru99driver.get ("http://demo.guru99.com/V4/");// trouve la zone de texte du nom d'utilisateur et la remplitdriver.findElement (Par.nom ("uid")). sendKeys ("Pilote 3");}}
TestNG.XML
xml version = "1.0" encoding = "UTF-8"?>
Ordre et dépendance des cas de test
Vous pouvez définir l'ordre et la dépendance de l'exécution du scénario de test.
Supposons que vous ayez deux cas de test, «testGuru99TC1» et «testGuru99TC2» et que vous vouliez exécuter le scénario de test «testGuru99TC2» avant «testGuru99TC1». Dans ce cas, nous utiliserons l'attribut 'dependOnMethods' pour créer une dépendance et un ordre d'exécution.
xml version = "1.0" encoding = "UTF-8"?>
Résumé
- Un nouvel ID de session est créé pour une nouvelle instance de WebDriver.
- Une session sera liée à un navigateur particulier.
- En utilisant le thread d'attribut et en parallèle, 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