TestNG @Testprioritet i Selenium
TestNG er en Testing rammeverk, som dekker forskjellige typer testdesign som en enhetstest, funksjonstest, ende-til-ende-test, UI-test og integrasjonstest.
Du kan kjøre en enkelt eller flere testtilfeller i din Testng kode.
Hvis testprioritet ikke er definert mens du kjører flere testtilfeller, TestNG tildeler alle @Test en prioritet som null(0).
Nå, mens du løper; lavere prioriteringer vil bli planlagt først.
Demo av TestNG kode uten prioritet
La oss ta et scenario der sekvensering vil være nødvendig for å bestå alle testtilfeller:
Scenario: Generer en kode der du må utføre en Google Søk med et spesifikt nøkkelord, for eksempel «Facebook». Bekreft nå at nettlesertittelen er endret til «Facebook –» Google Søk».
Merk: Hvert trinn du koder skal være i separate metoder
Metode 1: Åpne nettleseren si Firefox (openBrowser())
Metode 2: Lansering Google.com (lanseringGoogle())
Metode 3: Utfør et søk med «Facebook» (performSearchAndClick1stLink())
Metode 4Bekreft Google søkesidetittel (FaceBookPageTitleVerification())
Code for vårt scenario:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class Priority_In_testNG {
WebDriver driver;
// Method 1: Open Brower say Firefox
@Test
public void openBrowser() {
driver = new FirefoxDriver();
}
// Method 2: Launch Google.com
@Test
public void launchGoogle() {
driver.get("http://www.google.co.in");
}
// Method 3: Perform a search using "Facebook"
@Test
public void peformSeachAndClick1stLink() {
driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");
}
// Method 4: Verify Google search page title.
@Test
public void FaceBookPageTitleVerification() throws Exception {
driver.findElement(By.xpath(".//*[@value='Search']")).click();
Thread.sleep(3000);
Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);
}
}
Forklaring til Code
Som nevnt ovenfor har vi laget 4 testcases for å utføre hver handling i en uavhengig metode.
- Den første metoden (åpen nettleser) tilstander for å initialisere Firefox browser.
- Den andre metoden (lanseringGoogle) stater som lanserer Google.com er i den initialiserte nettleseren.
- Den tredje metoden (peformSeachAndClick1stLink)stater som utfører et søk i søkeboksen (med xpath (“.//*[@title='Søk']”) med et søkeord som Facebook og
- Den fjerde og siste metoden (FaceBookPageTitleVerification) stater som klikker på søkeikonet til Google og bekreft at nettlesertittelen er endret til Facebook - Google Søke.
Kjør nå denne koden ved å bruke testNG som vist i videoen, du vil finne alle Testsak mislykkes. Årsaken til feilen: siden det er en avhengighet av tidligere testtilfelle for å bestå, vil bare den aktuelle testsaken som kjører bli bestått.
I dette tilfellet,
- Den første metoden som utføres er openBrowser(). Den ble bestått fordi den ikke har noen avhengighet.
- Den andre metoden som utføres er FaceBookPageTitleVerification(); den mislykkes fordi vi prøver å klikke på søkeknappen og bekrefte nettlesertittelen.
- Du kan se at hvis søkeaktivitet ikke er prosess, så kan ethvert annet trinn passeres. Derfor er dette grunnen til at testsakene mine mislykkes.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demo av TestNG kode uten prioritet i alfabetisk rekkefølge
Hvis vi ikke nevner noen prioritet, vil testng kjøre @Test-metodene basert på alfabetisk rekkefølge av metodenavnene deres uavhengig av hvor de er implementert i koden.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test
public void c_method(){
System.out.println("I'm in method C");
}
@Test
public void b_method(){
System.out.println("I'm in method B");
}
@Test
public void a_method(){
System.out.println("I'm in method A");
}
@Test
public void e_method(){
System.out.println("I'm in method E");
}
@Test
public void d_method(){
System.out.println("I'm in method D");
}
}
Produksjon
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
Selv om vi definerte metodene på en tilfeldig måte (c, b, a, e, d), utførte testng metodene basert på metodenavnene deres ved å vurdere alfabetisk rekkefølge, og det samme ble reflektert i utdataene også.
Slik setter du prioritet i TestNG
Som du har sett i forrige eksempel at sekvensering kreves for å passere dette scenariet, så vil vi endre den forrige kodebiten med Prioritetsparameter slik at hver test skal kjøre mot prioriteten som er tildelt dem.
Nå som du kan se har vi tildelt prioritet til hvert testtilfelle betyr at testtilfelle vil den lavere prioritetsverdien bli utført først.
Prioritet i testNG i aksjon
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class Priority_In_testNG {
WebDriver driver;
// Method 1: Open Browser say Firefox
@Test (priority=1)
public void openBrowser() {
driver = new FirefoxDriver();
}
// Method 2: Launch Google.com
@Test (priority=2)
public void launchGoogle() {
driver.get("http://www.google.co.in");
}
// Method 3: Perform a search using "Facebook"
@Test (priority=3)
public void peformSeachAndClick1stLink() {
driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook");
}
// Method 4: Verify Google search page title.
@Test (priority=4)
public void FaceBookPageTitleVerification() throws Exception {
driver.findElement(By.xpath(".//*[@value='Search']")).click();
Thread.sleep(3000);
Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true);
}
}
Forklaring til Code
Etter å ha tildelt prioritet til hver testcase, kjør koden ovenfor med testNG som vist i Video-2 nevnt nedenfor.
Her kan du se at testsaker er prioritert. Testtilfeller med lavere prioritet utføres først, dvs. nå er det en sekvensiell utførelse i henhold til prioritet i testtilfellene. Derfor består alle testtilfeller nå.
Legg merke til formørkelseskonsollen:
Produksjon :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Nummer 0 har høyeste prioritet (det vil bli utført først) og prioritet fortsetter basert på det gitte tallet, dvs. 0 har høyeste prioritet enn 1. 1 har høyeste prioritet enn 2 og så videre.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test(priority=6)
public void c_method(){
System.out.println("I'm in method C");
}
@Test(priority=9)
public void b_method(){
System.out.println("I'm in method B");
}
@Test(priority=1)
public void a_method(){
System.out.println("I'm in method A");
}
@Test(priority=0)
public void e_method(){
System.out.println("I'm in method E");
}
@Test(priority=3)
public void d_method(){
System.out.println("I'm in method D");
}
}
Produksjon
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
Her har vi gitt prioriteringene som 0,1,3,6,9. Så, metode som har 0 som prioritet, utføres først og deretter metode som har prioritet-1 og så videre. Her vil ikke metodenavnet i alfabetisk rekkefølge bli vurdert ettersom vi har gitt prioriteringene
Metoder med samme prioritet
Det kan være en sjanse for at metoder kan ha samme prioritet. I disse tilfellene vurderer testng den alfabetiske rekkefølgen til metodenavnene med samme prioritet.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test(priority=6)
public void c_method(){
System.out.println("I'm in method C");
}
@Test(priority=9)
public void b_method(){
System.out.println("I'm in method B");
}
@Test(priority=6)
public void a_method(){
System.out.println("I'm in method A");
}
@Test(priority=0)
public void e_method(){
System.out.println("I'm in method E");
}
@Test(priority=3)
public void d_method(){
System.out.println("I'm in method D");
}
}
Produksjon
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
Her utføres 'e' og 'd' basert på deres prioritetsverdier. Men metodene 'a' og 'c' inneholder samme prioritetsverdi(6). Så her vurderer testng den alfabetiske rekkefølgen 'a' og 'c' og utfører dem deretter.
Kombinerer både prioriterte (har samme prioritet) og ikke-prioriterte metoder
I dette tilfellet vil vi dekke to tilfeller i en testng-klasse.
- Metoder som har samme prioritetsverdi.
- Mer enn én ikke-prioritert metode.
package com.guru.testngannotations;
import org.testng.annotations.Test;
public class TestNG_Priority_Annotations {
@Test()
public void c_method(){
System.out.println("I'm in method C");
}
@Test()
public void b_method(){
System.out.println("I'm in method B");
}
@Test(priority=6)
public void a_method(){
System.out.println("I'm in method A");
}
@Test(priority=0)
public void e_method(){
System.out.println("I'm in method E");
}
@Test(priority=6)
public void d_method(){
System.out.println("I'm in method D");
}
}
Utgang:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
Forklaring:
Første preferanse: Ikke-prioriterte metoder: 'c' og 'b': Basert på alfabetisk rekkefølge ble 'b' utført først og deretter 'c'.
Andre preferanse: Prioriterte metoder: 'a', 'e' og 'd': 'e' ble utført først da den hadde høyeste prioritet(0). Siden prioriteringen av 'a'- og 'd'-metodene var de samme, vurderte testng den alfabetiske rekkefølgen til metodenavnene deres. Så mellom dem ble 'a' henrettet først og deretter 'd'.
Skiller mellom store og små bokstaver i TestNG
Bare for din informasjon er det en standard syntaks for å definere prioritet i testNG, dvs @Test (prioritet=4), anta at du definerer det i en annen syntaks @Test (PRIORITET=1) så vil IDE-en din vise det som en kompileringsfeil. Se bildet nedenfor:
Konklusjon
Som du har sett at hvis det er et krav om å kjøre et sett med test-case i en bestemt rekkefølge, kan det enkelt gjøres ved å bruke Prioritet bruker testNG som et kjøreverktøy.
Denne opplæringen er gjort mulig på grunn av bidrag fra Ramandeep Singh og Rama Krishna Gadde

