Groupes dans TestNG

โšก Rรฉsumรฉ intelligent

Groupes dans TestNG Vous pouvez ainsi รฉtiqueter les mรฉthodes de test avec des libellรฉs logiques, puis les inclure ou les exclure via une suite XML. Cette approche simplifie les tests de fumรฉe, de rรฉgression et de dรฉpendances sans rรฉรฉcriture. Java code.

  • ๐Ÿท๏ธ Syntaxe des annotations : Utilisez le @Test(groups = {"smoke","regression"}) รฉtiqueter toute mรฉthode avec un ou plusieurs noms de groupe logiques.
  • (I.e. Contrรดle XML : Le <groups><run><include> et <exclude> Les balises ร  l'intรฉrieur du fichier testng.xml dรฉterminent quelles mรฉthodes balisรฉes sont effectivement exรฉcutรฉes.
  • ๐Ÿ”— Dรฉpendances Le dependsOnGroups L'attribut force l'ordre de sorte que les groupes prรฉrequis se terminent toujours avant que les tests dรฉpendants ne commencent.
  • ๐Ÿค– Sรฉlection par IA : Les outils d'analyse d'impact des tests d'IA associent les modifications de code aux groupes concernรฉs, de sorte que seules les suites de tests affectรฉes soient exรฉcutรฉes ร  chaque commit.
  • ๐Ÿงช TestNG 7.x : Les versions modernes assurent une compatibilitรฉ totale des groupes avec l'exรฉcution parallรจle, les รฉcouteurs et les pipelines Maven Surefire.

Groupes dans TestNG

TestNG est un framework de test qui couvre les tests unitaires, fonctionnels, de bout en bout, d'interface utilisateur et d'intรฉgration pour Java projets.

Vous pouvez exรฉcuter un seul package ou plusieurs packages (un package encapsule des classes apparentรฉes dans une structure de rรฉpertoire dรฉfinie) en crรฉant une suite XML et en la dรฉclenchant via Maven.

TestNG Groupes avec exemple

Vous utilisez des groupes dans TestNG quand:

  • Vous ne souhaitez pas disperser les mรฉthodes de test dans de nombreuses classes uniquement par domaine fonctionnel, et
  • Vous souhaitez ignorer (ne pas exรฉcuter) certains cas de test comme s'ils รฉtaient absents du code source.
  • Pour atteindre ces deux objectifs, vous regroupez les mรฉthodes en catรฉgories logiques. TestNG puis respecte les filtres ยซ include ยป et ยซ exclude ยป dรฉclarรฉs dans la suite XML.

L'extrait ci-dessous illustre la syntaxe de marquage de groupe utilisรฉe sur une mรฉthode de test.

@Tester (groupes = { ยซ crรฉer des liens ยป, ยซ liens forts ยป })

Deux noms de groupe sont utilisรฉs ici, ร  savoir bonding et strong_tiesCe sont des รฉtiquettes logiques que vous pouvez renommer en fonction de votre projet.

Le <groups> Cette balise marque le dรฉbut des filtres de groupe au sein de la suite XML.

Vous personnalisez ensuite le code XML pour sรฉlectionner un groupe parmi les classes รฉtiquetรฉes. L'exemple ci-dessous illustre la syntaxe de dรฉclaration de groupe.

<groupes>
<courir>
<comprennent Le nom=ยซ crรฉer des liens ยป />
</courir>
</groupes>

Supposons qu'une seule classe contienne 10 mรฉthodes de test.

Parmi ces mรฉthodes :

  • 6 mรฉthodes permettent de transporter le bonding groupe, et
  • 4 mรฉthodes permettent de transporter le strong_ties en groupe.

Ensuite, vous configurez Maven et Java chemins et utilisez les Eclipse IDE pour dรฉmontrer l'utilisation en groupe via des fichiers XML ร  l'intรฉrieur d'un Java-projet Maven basรฉ sur.

Crรฉer du XML pour TestNG avec des tags

  • Le fichier XML (Extensible Markup Language) du framework Maven stocke la configuration d'un ou plusieurs tests, dรฉclarรฉs ร  l'intรฉrieur du ร‰tiquette.
  • Chaque entrรฉe de test est enveloppรฉe dans un รฉtiquette et peut contenir un ou plusieurs TestNG classes.
  • A Java classe avec un ou plusieurs @Tester les annotations sur ses mรฉthodes sont traitรฉes comme une TestNG classe.

Plusieurs balises apparaissent en sรฉquence pour construire un fichier testng.xml fonctionnel, ร  savoir , , et .

  • Le L'รฉtiquette contient le nom au niveau de la suite utilisรฉ dans TestNG rapports pour les rรฉsumรฉs d'exรฉcution.
  • Le <test name=โ€Guru Dรฉmonstration du test de fumรฉe 99โ€> L'รฉtiquette contient un nom de test logique ; le rapport l'utilise pour le dรฉcompte des rรฉussites, des รฉchecs et des tests ignorรฉs, ainsi que pour le temps d'exรฉcution total et les mรฉtadonnรฉes du groupe.
  • Le L'รฉtiquette pointe vers la classe de test, oรน com.group.guru99 est le paquet et TC_Class1 est le nom de la classe.

<!DOCTYPE suite SYSTรˆME ยซ http://testng.org/testng-1.0.dtd ยป>
<suite Le nom="Suite">
<tester Le nom="Guru Dรฉmonstration du test de fumรฉe 99>
<groupes>
<courir>
<comprennent Le nom=ยซ liens forts ยป />
</courir>
</groupes>
<les classes>
<classe Le nom=ยซ com.group.guru99.TC_Class1 ยป />
</les classes>
</tester>
</suite>

Cette configuration XML est rรฉfรฉrencรฉe dans les tutoriels vidรฉo des sections suivantes.

ยซ exclure ยป ou ยซ inclure ยป dans le test XML

Si le mรฉcanisme de groupe vous semble lourd pour un petit filtre, la suite testng.xml vous permet รฉgalement d'exclure ou d'inclure des mรฉthodes de test individuelles par leur nom.

Balise d'exclusionSyntaxe pour la balise d'exclusionexclure Le nom="${TEST_CASE_NAME}" />
Inclure la baliseSyntaxe de la balise includecomprennent Le nom="${TEST_CASE_NAME}" />

ร€ noter: Vous pouvez inclure ou exclure de nombreux cas de test en une seule exรฉcution, et la mรชme syntaxe s'applique aux filtres de groupe.

Utilisation de dependsOnGroups pour une exรฉcution ordonnรฉe

Au-delร  de la simple inclusion, TestNG permet ร  un groupe de dรฉpendre d'un autre en utilisant le dependsOnGroups Attribut. Le lanceur garantit que chaque mรฉthode du groupe parent se termine avant le dรฉmarrage de toute mรฉthode dรฉpendante, ce qui assure la fiabilitรฉ des prรฉconditions.

  • Connexion d'abord, puis transactions : ร‰tiqueter les mรฉthodes de connexion avec group = "auth"et des tests de transfert d'รฉtiquettes avec dependsOnGroups = {"auth"}Les tests de transfert ne s'exรฉcutent qu'aprรจs la rรฉussite de l'authentification.
  • Ignorer l'รฉchec : Si une mรฉthode du groupe parent รฉchoue, TestNG Au lieu de signaler un รฉchec pur et simple, cette fonction indique que les mรฉthodes dรฉpendantes sont ignorรฉes, ce qui garantit l'exactitude des rapports.
  • Combiner avec alwaysRun : Les mรฉthodes de nettoyage doivent dรฉfinir alwaysRun = true Le processus de nettoyage continue donc de s'exรฉcuter mรชme lorsqu'un groupe en amont tombe en panne.

Ce modรจle est courant pour les suites de bout en bout oรน la configuration de l'API doit รชtre terminรฉe avant le lancement des assertions d'interface utilisateur.

Courir TestNG Regrouper, inclure, exclure du code (dรฉmo vidรฉo)

Vous trouverez ci-dessous une prรฉsentation dรฉtaillรฉe de Java le code et la suite XML qui pilotent le grouper, exclure et inclure comportement.

Scรฉnario de test: Lancez l' GuruSite bancaire de dรฉmonstration 99, vรฉrifiez quelques รฉlรฉments sur la page de connexion, entrez vos identifiants et revรฉrifiez quelques รฉlรฉments sur le tableau de bord aprรจs la connexion.

Courir TestNG Grouper, Inclure, Exclure Code

ร€ noter: Chaque รฉtape s'exรฉcute dans sa propre mรฉthode, mais lors de l'exรฉcution, l'ordre dรฉpend des entrรฉes de la suite XML.

  • Mรฉthode 1: Initialisez le navigateur et lancez le URL (tc01LaunchURL()).
  • Mรฉthode 2: Vรฉrifiez l'en-tรชte de la page de connexion (tc02VerifyLaunchPage()).
  • Mรฉthode 3: Saisissez votre nom d'utilisateur et votre mot de passe sur le formulaire de connexion (tc03EnterCredentials()).
  • Mรฉthode 4: Vรฉrifiez la prรฉsence de l'identifiant du gestionnaire sur le tableau de bord de l'utilisateur (tc04VerifyLoggedInPage()).
  • Mรฉthode 5: Vรฉrifiez les liens supplรฉmentaires sur le tableau de bord utilisateur (tc05VerifyHyperlinks()).

Code pour ce scรฉnario :

paquet com.group.guru99;

importer java.util.concurrent.TimeUnit ;

importer org.openqa.selenium.By ;
importer org.openqa.selenium.WebDriver ;
importer org.openqa.selenium.firefox.FirefoxConducteurs;
importer org.testng.Assert;
importer org.testng.annotations.Test ;

classe publique TC_Classe1 {
finale statique publique pilote web webDriver = New FirefoxChauffeur();

Chaรฎne launchPageHeading = "//h3[text()='Guru99 Banque']โ€;
finale Chaรฎne รฉlรฉment userName = "//input[@name='uid']", รฉlรฉment_mot_de_passe = "//input[@name='password']",
รฉlรฉment_signIn = "//input[@name='btnLogin']";
finale Chaรฎne valeur_nom_utilisateur = ยซ mgr28642 ยป, valeur_mot_de_passe = ยซ ydAnate ยป;
finale Chaรฎne ID du gestionnaire = "//td[contains(text(),'ID du responsable')]";
finale Chaรฎne nouveauClient = โ€œ//a[@href='addcustomerpage.php']โ€, Transfert de fonds = "//a[@href='FundTransInput.php']";

/** Ce cas de test initialise le pilote Web */
@Tester(groupes = { ยซ crรฉer des liens ยป, ยซ liens forts ยป })
vide public tc01LancementURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
webDriver.get("https://www.demo.guru99.com/V4/");
}

/** Vรฉrifie la prรฉsence de l'en-tรชte sur la page de connexion */
@Tester(groupes = { ยซ crรฉer des liens ยป })
vide public tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
ยซ Lโ€™en-tรชte de la page dโ€™accueil nโ€™est pas affichรฉ ยป);
System.out.println(ยซ Lโ€™en-tรชte de la page dโ€™accueil sโ€™affiche ยป);
}

/** Saisit le nom d'utilisateur, le mot de passe, puis clique sur Se connecter */
@Tester(groupes = { ยซ crรฉer des liens ยป, ยซ liens forts ยป })
vide public tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}

/** Vรฉrifie l'identifiant du responsable sur le tableau de bord */
@Tester(groupes = { ยซ liens forts ยป })
vide public tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
ยซ Lโ€™รฉtiquette dโ€™identification du responsable nโ€™est pas affichรฉe ยป);
System.out.println(ยซ L'รฉtiquette "ID du responsable" est affichรฉe ยป);
}

/** Vรฉrifie le lien ยซ Nouveau client ยป et le lien ยซ Transfert de fonds ยป sur le tableau de bord */
@Tester(groupes = { ยซ crรฉer des liens ยป })
vide public tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
ยซ Le lien hypertexte pour les nouveaux clients ne s'affiche pas. ยป);
System.out.println(ยซ Le lien hypertexte pour les nouveaux clients sโ€™affiche ยป);

Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
ยซ Le lien de transfert de fonds n'est pas affichรฉ ยป);
System.out.println(ยซ Le lien de transfert de fonds s'affiche ยป);
}
}

Veuillez noter : les identifiants bancaires de dรฉmonstration restent valides pendant environ 20 jours ; une exรฉcution locale peut donc afficher une erreur dโ€™identifiants invalides aprรจs lโ€™expiration de ce dรฉlai.

Explication du code :

Cinq mรฉthodes d'essai, une par action, chacune comportant un groups attribut sur le @Test annotation.

Les deux รฉtiquettes de groupe logique sont strong_ties et bonding.

  • La premiรจre et la troisiรจme mรฉthode comportent les deux bonding et strong_tiesElles s'exรฉcutent donc chaque fois que l'un ou l'autre groupe est inclus dans la suite. Il s'agit d'un modรจle courant pour les applications partagรฉes. cas de test pas.
  • La deuxiรจme mรฉthode est uniquement รฉtiquetรฉe avec bonding, il ne fonctionne donc que lorsque le bonding Le groupe est inclus.
  • La quatriรจme mรฉthode est uniquement รฉtiquetรฉe avec strong_ties, donc il ne s'exรฉcute que lorsque ce groupe est inclus.
  • La cinquiรจme mรฉthode est uniquement รฉtiquetรฉe avec bonding, il ne fonctionne donc que lorsque le bonding Le groupe est inclus.

Les quatre scรฉnarios d'exรฉcution suivants s'ensuivent :

Scenario 1 : Exรฉcutez chaque mรฉthode de test, quel que soit le groupe. Supprimez le <groups> bloc extrait du XML en cours d'exรฉcution.

Scenario 2 : Exรฉcuter uniquement les mรฉthodes liรฉes ร  un groupe choisi, ร  savoir strong_ties or bondingVeuillez vous rรฉfรฉrer ร  la vidรฉo ci-dessous.

  • Dans la premiรจre partie de la vidรฉo, <groups> Le bloc est commentรฉ, donc chaque mรฉthode de test s'exรฉcute.
  • Dans la deuxiรจme partie, le filtre de groupe est rรฉtabli et seules les mรฉthodes correspondantes sont exรฉcutรฉes.

Scenario 3 : Utilisez le filtre d'exclusion pour ignorer les cas de test sรฉlectionnรฉs. Veuillez consulter la vidรฉo.

  • La dรฉmo exclut tc02 par son nom dans le fichier XML en cours d'exรฉcution, et le rapport de rรฉsultats confirme que la mรฉthode exclue ne s'exรฉcute pas.

Scenario 4 : Appliquez le filtre d'inclusion pour exรฉcuter uniquement tc01LaunchURL, tc03EnterCredentials et tc05VerifyHyperlinksVeuillez vous rรฉfรฉrer ร  la vidรฉo.

Dans cette exรฉcution, seules les mรฉthodes listรฉes dans le filtre d'inclusion s'exรฉcutent, exactement comme configurรฉ.

Tรฉlรฉchargez l'exemple de projet ร  partir du lien ci-dessous.

Tรฉlรฉchargez ci-dessus Code

Conclusion

Groupes dans TestNG structurer les grands Selenium et des suites d'unitรฉs en remplaรงant les divisions de classes ponctuelles par des filtres XML dรฉclaratifs.

ร‰tiquetez vos mรฉthodes avec @Test(groups = {...}), puis utilisez <include>, <exclude> et dependsOnGroups pour exรฉcuter des tests de fumรฉe, de rรฉgression et de bout en bout ร  partir du mรชme projet Maven sur TestNG 7.x.

FAQ

Un groupe est une รฉtiquette logique associรฉe ร  une mรฉthode de test par le biais du groups attribut sur @TestLa suite XML sรฉlectionne ensuite les groupes ร  l'aide de filtres d'inclusion et d'exclusion, vous permettant ainsi de dรฉcider au moment de l'exรฉcution quelles mรฉthodes รฉtiquetรฉes doivent รชtre exรฉcutรฉes.

intรฉrieur <groups><run>, le <include name="..."> Les groupes de listes blanches de tags pour l'exรฉcution, et <exclude name="..."> les bloque. TestNG La clause `excludes` s'applique aprรจs la clause `includes`, de sorte qu'un groupe exclu est toujours ignorรฉ, mรชme s'il figure รฉgalement dans la clause `includes`.

Le dependsOnGroups attribut sur @Test les forces TestNG exรฉcuter chaque mรฉthode du groupe listรฉ avant le dรฉmarrage de la mรฉthode dรฉpendante. Si une mรฉthode prรฉrequise รฉchoue, TestNG indique que la mรฉthode dรฉpendante est ignorรฉe plutรดt qu'en รฉchec.

Oui. Le groups L'attribut accepte un tableau, donc @Test(groups = {"smoke", "regression"}) place une mรฉthode dans les deux groupes. TestNG Cette mรฉthode est exรฉcutรฉe chaque fois que l'un ou l'autre groupe est inclus dans la suite, ce qui permet de conserver les รฉtapes partagรฉes sans les redistribuer.

TestNG La version 7.x est la version maintenue, avec des mises ร  jour sous la version 7.x. org.testng:testng Maven coordonne les choses. Il assure une compatibilitรฉ totale entre les groupes, l'exรฉcution parallรจle et les รฉcouteurs avec les architectures modernes. Selenium Projets 4 et JDK 17.

Les outils d'analyse d'impact basรฉs sur l'IA analysent les diffรฉrences de code, puis associent les classes modifiรฉes aux groupes correspondants. Le pipeline n'exรฉcute que ces groupes รฉtiquetรฉs pour chaque demande de fusion, rรฉduisant ainsi le dรฉlai de retour d'information tout en conservant une qualitรฉ optimale.ping Des voies risquรฉes ร  l'essai.

Oui. Les algorithmes de clustering d'IA analysent les journaux d'erreurs historiques, signalent les tests instables et proposent un sous-ensemble stable รฉtiquetรฉ comme regressionLes ingรฉnieurs approuvent la liste, puis TestNG Ce groupe gรจre ce groupe chaque nuit, ce qui permet de maintenir la suite bien approvisionnรฉe sans compromettre la couverture.

Rรฉsumez cet article avec :