Exécutez plusieurs cas de test avec TestNG Suite à Selenium
TestNG vous permet d'exécuter des méthodes de test, des classes de test et des cas de test en parallèle dans votre projet. En effectuant une exécution parallèle, nous pouvons réduire le « temps d'exécution » car les tests sont démarrés et exécutés simultanément dans différents threads.
Ici, nous verrons comment exécuter plusieurs classes (c'est-à-dire différentes suites) en utilisant TestNG.
Étape 1) Création d'un TestNGFichier .xml pour exécuter le test
Pour ce faire, suivez les étapes ci-dessous.
- Créer un nouveau projet dans Eclipse
- Créez deux packages dans les projets (nommez-les com.suite1 et com.suite2)
- Créez une classe dans chaque package (nommez-les Flipkart.java et Snapdeal.java) et copiez le code ci-dessous dans les classes respectives
- Créez un nouveau fichier dans votre projet et nommez-le testng.xml (assurez-vous d'avoir installé le plugin de test pour Eclipse, instructions disponibles en cliquant ici). Testng.xml contient toute la configuration (noms de classe, noms de tests et noms de combinaisons.
Flipkart.java
package com.suite1; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Flipkart{ WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; // This method is to navigate flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.partialLinkText("Login")).click(); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-email")) .sendKeys(username); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-pwd")) .sendKeys(password); driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3"); driver.findElement( By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold")) .click(); // select the first item in the search results String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement( By.cssSelector(".btn-express-checkout.btn-big.current")) .click(); driver.findElement(By.cssSelector(".remove.fk-inline-block")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { Actions s = new Actions(driver); WebElement user = driver.findElement(By.partialLinkText(username)); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
SnapDeal.java
package com.suite2; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SnapDeal { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; String pinCode = ""; // This method is to navigate snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.xpath("//button[text()='Login']")).click(); driver.switchTo().frame("loginIframe"); driver.findElement(By.cssSelector("div[onClick='getLoginForm()']")) .click(); driver.findElement(By.id("j_username")).sendKeys(username); driver.findElement(By.id("j_password_login")).sendKeys(password); driver.findElement(By.id("signin_submit")).click(); driver.switchTo().defaultContent(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword")) .sendKeys("iphone 6s"); driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click(); // select the first item in the search results String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click(); driver.findElement(By.id("pincode-check")).sendKeys(pinCode); driver.findElement(By.id("buy-button-id")).click(); driver.findElement(By.cssSelector("i[title='Delete Item']")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { driver.findElement(By.linkText("START SHOPPING NOW")).click(); Actions s = new Actions(driver); WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user")); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
TestNg.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="1" verbose="1" name="Gmail Suite" annotations="JDK" parallel="tests"> <test name="flipkart"> <classes> <class name="com.suite1.Flipkart"/> </classes> </test> <test name="Myntra"> <classes> <class name="com.suite2.SnapDeal"/> </classes> </test> </suite>
La structure finale du projet ressemble à ci-dessous,
Étape 2) Exécution parallèle dans TestNG
Après avoir créé le fichier XML comme indiqué ci-dessus, à l'étape suivante, nous exécuterons le test parallèle. Ci-dessous le code.
1) nombre de fils: Ceci est utilisé pour l'exécution parallèle, basée sur le script numérique. Il s'exécutera dans un ordre parallèle ou séquentiel.
2) verbeux: Il est utilisé pour enregistrer les détails d'exécution dans la console. La valeur doit être comprise entre 1 et 10. Les détails du journal dans la fenêtre de la console deviendront plus détaillés et plus clairs à mesure que vous augmenterez la valeur de l'attribut détaillé dans le fichier de configuration testng.xml.
3) nom: Nom de la suite. Ici c'est "Gmail Suite"
4) Parallèle: Pour exécuter des scripts en parallèle, la valeur peut être tests/classes/méthodes/suites. La valeur par défaut est aucun
Faites un clic droit sur testng.xml et sélectionnez exécuter en tant que test, une fois réussi, vous verrez tous les résultats
Lorsque vous exécutez le code ci-dessus, vous obtiendrez le résultat suivant.
Sortie :
1) nom de la suite donné dans testng.xml
2) nom du test donné dans testng.xml
3) nom de la classe donné dans testng.xml
4) noms de méthodes annotés avec @Test dans le fichier .java
De même, il exécutera également la suite de tests pour les accords instantanés.
Conclusion
Ici, nous avons vu dans l'exemple ci-dessus, comment utiliser Tester pour exécuter un test parallèle. TestNG donne la possibilité d'exécuter plusieurs tests en parallèle dans un seul fichier de configuration (XML).