TestNG Veiledning: Hva er merknader og rammeverk i Selenium

Hva er TestNG?

TestNG er et rammeverk for automatiseringstesting der NG står for "Next Generation". TestNG er inspirert av JUnit som bruker merknadene (@). TestNG overvinner ulempene med JUnit og er designet for å lage ende-til-ende testing enkelt.

Ved hjelp av TestNG, kan du generere en skikkelig rapport, og du kan enkelt finne ut hvor mange testtilfeller som er bestått, ikke bestått og hoppet over. Du kan utføre de mislykkede testsakene separat.

For eksempel:

  • Anta at du har fem testtilfeller, en metode skrives for hvert testtilfelle (anta at programmet er skrevet med hovedmetoden uten å bruke testNG). Når du kjører dette programmet først, utføres tre metoder vellykket, og den fjerde metoden mislyktes. Deretter korrigerer du feilene i den fjerde metoden, nå vil du bare kjøre den fjerde metoden fordi de tre første metodene uansett blir utført. Dette er ikke mulig uten bruk TestNG.
  • Ocuco TestNG in Selenium gir et alternativ, dvs. testng-failed.xml-fil i test-output-mappen. Hvis du vil kjøre kun mislykkede testtilfeller betyr det at du kjører denne XML-filen. Den vil kun utføre mislykkede testtilfeller.

Ved siden av konseptet ovenfor, vil du lære mer om TestNG, som hva er fordelene med TestNG, hvordan lage testmetoder ved å bruke @test-kommentarer, hvordan konvertere disse klassene til testpakkefil og kjøre gjennom formørkelsen så vel som fra kommandolinjen.

Hvorfor bruk TestNG med Selenium?

Misligholde Selenium tester genererer ikke et riktig format for testresultatene. Bruker TestNG in Selenium, kan vi generere testresultater.

bro Selenium brukere bruker dette mer enn Junite på grunn av dens fordeler. Det er så mange funksjoner ved TestNG, men vi vil kun fokusere på de viktigste som vi kan bruke i Selenium. Følgende er hovedtrekkene til Selenium TestNG:

  • Generer rapporten i et riktig format, inkludert et antall testtilfeller, antall beståtte testtilfeller, antall testtilfeller som mislyktes og antall testtilfeller som er hoppet over.
  • Flere testtilfeller kan grupperes lettere ved å konvertere dem til en testng.xml-fil. Der du kan gjøre prioriteringer hvilken testcase som skal utføres først.
  • Det samme testtilfellet kan utføres flere ganger uten løkker bare ved å bruke nøkkelord kalt "invocation count".
  • Ved å bruke testng kan du utføre flere testtilfeller på flere nettlesere, dvs. cross nettlesertesting.
  • Ocuco TestNG rammeverket kan enkelt integreres med verktøy som TestNG Maven, Jenkins, etc.
  • Merknader som brukes i testingen er veldig enkle å forstå, f.eks. @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver har ingen innebygd mekanisme for å generere rapporter. TestNG kan generere rapporten i et lesbart format som det som vises nedenfor.
  • Bruk TestNG med Selenium

  • TestNG forenkler måten testene er kodet på. Det er ikke lenger behov for en statisk hovedmetode i våre tester. Rekkefølgen av handlinger er regulert av lettfattelige merknader som ikke krever at metoder er statiske.
  • Bruk TestNG med Selenium

    Bruk TestNG med Selenium

  • Ufangede unntak håndteres automatisk av TestNG uten å avslutte testen for tidlig. Disse unntakene rapporteres som mislykkede trinn i rapporten.

fordeler med TestNG enn JUnit

Det er tre store fordeler med TestNG enn JUnit:

  • Merknader er lettere å forstå
  • Testtilfeller kan grupperes lettere
  • Parallell testing er mulig

Hva er merknad i TestNG?

Merknader i TestNG er kodelinjer som kan kontrollere hvordan metoden under dem skal utføres. De er alltid innledet med @-symbolet. En veldig tidlig og rask TestNG Eksempelet er vist nedenfor.

Merknad i TestNG

Merknader vil bli diskutert senere i avsnittet "Annoteringer brukt i TestNG, så det er helt ok hvis du ikke forstår ovenstående TestNG Eksempel ennå. Det er bare viktig å merke seg for nå at merknader er inne TestNG er lettere å kode og forstå enn i JUnit.

Muligheten til å kjøre tester parallelt er tilgjengelig i TestNG men ikke i JUnit, Så TestNG rammeverk er mer foretrukket for testere som bruker Selenium Nett.

Hvordan skrive testsaker i TestNG?

Trinn 1) Skriv forretningslogikken din og sett inn TestNG merknader i koden din.
Trinn 2) Legg til mer informasjon som klassenavn, gruppenavn, pakkenavn osv
Trinn 3) Kjør TestNG.

Opprett testcase ved å bruke TestNG Merknader

Nå skal vi lære hvordan du lager vår første testcase ved hjelp av TestNG Merknader i Selenium:

Før vi oppretter en testcase, bør vi først sette opp en ny TestNG Prosjekt i Eclipse og navngi den som "FørstTestNGProsjekt".

Setter opp en ny TestNG Prosjekt

Trinn 1: Klikk på Fil > Ny > Java Prosjekt

Setter opp en ny TestNG Prosjekt

Trinn 2: Skriv "FørstTestNGProsjekt" som prosjektnavn og klikk deretter på Neste.

Setter opp en ny TestNG Prosjekt

Trinn 3: Vi vil nå begynne å importere TestNG Biblioteker på prosjektet vårt. Klikk på "Biblioteker"-fanen, og deretter "Legg til bibliotek ..."

Setter opp en ny TestNG Prosjekt

Trinn 4: I dialogboksen Legg til bibliotek velger du "TestNG"Og klikk Neste.

Setter opp en ny TestNG Prosjekt

Trinn 5: Klikk på Fullfør.

Setter opp en ny TestNG Prosjekt

Det bør du legge merke til TestNG er inkludert på biblioteklisten.

Setter opp en ny TestNG Prosjekt

Trinn 6: Vi vil nå legge til JAR-filene som inneholder Selenium API. Disse filene finnes i Java klientdriveren som vi lastet ned fra https://www.selenium.dev/downloads/ da vi skulle installere Selenium og Eclipse i de foregående kapitlene.

Setter opp en ny TestNG Prosjekt

Naviger deretter til der du har plassert Selenium JAR-filer.

Setter opp en ny TestNG Prosjekt

Etter å ha lagt til de eksterne JAR-ene, skal skjermen se slik ut.

Setter opp en ny TestNG Prosjekt

Trinn 7: Klikk Fullfør og bekreft at vår førsteTestNGProsjektet er synlig på Eclipse's Package Explorer-vindu.

Setter opp en ny TestNG Prosjekt

Hvordan lage en ny TestNG Test fil

Nå som vi er ferdige med å sette opp prosjektet vårt i dette TestNG veiledning, la oss lage en ny TestNG filen.

Trinn 1: Klikk på 'src' og velg annet.
Høyreklikk på "src"-pakkemappen og velg deretter Ny > Annet...

Lage en ny TestNG Test fil

Trinn 2: Velg TestNG klasse.
Klikk på TestNG mappe og velg "TestNG klasse»-alternativet. Klikk Neste.

Lage en ny TestNG Test fil

Trinn 3: Skriv inn verdiene.
Skriv inn verdiene som er angitt nedenfor i de aktuelle inndataboksene og klikk på Fullfør. Legg merke til at vi har navngitt vår Java fil som "FirstTestNGFil".

Lage en ny TestNG Test fil

Trinn 4: Mal opprettet.
Eclipse skal automatisk lage malen for vår TestNG filen vist nedenfor.

Lage en ny TestNG Test fil

Koding av vår første TestNG Eksempel på testtilfelle

La oss nå lage vår første Testsak som vil sjekke om Mercury Tours' hjemmeside er korrekt. Skriv inn koden din som vist nedenfor TestNG Eksempel:

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class firsttestngfile {
    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     
  @Test
  public void verifyHomepageTitle() {
       
      System.out.println("launching firefox browser"); 
      System.setProperty("webdriver.gecko.driver", driverPath);
      driver = new FirefoxDriver();
      driver.get(baseUrl);
      String expectedTitle = "Welcome: Mercury Tours";
      String actualTitle = driver.getTitle();
      Assert.assertEquals(actualTitle, expectedTitle);
      driver.close();
  }
}

Legg merke til følgende.

  • TestNG krever ikke at du har en main()-metode.
  • Metoder trenger ikke være statiske.
  • Vi brukte @Test-kommentaren. @Test brukes til å fortelle at metoden under den er en testcase. I dette tilfellet har vi satt verifyHomepageTitle()-metoden til å være vår testcase, så vi plasserte en '@Test'-kommentar over den.
  • Siden vi bruker merknader i TestNG, måtte vi importere pakken org.testng.annotations.*.
  • Vi brukte Assert-klassen. Assert-klassen brukes til å utføre verifikasjonsoperasjoner i TestNG. For å bruke den må vi importere org.testng.Assert-pakken.

Du kan ha flere testtilfeller (derfor flere @Test-kommentarer) i en enkelt TestNG fil. Dette vil bli behandlet mer detaljert senere i avsnittet "Annoteringer brukt i TestNG».

Kjører testen

For å kjøre testen, bare kjør filen inn Eclipse som du vanligvis gjør. Eclipse vil gi to utganger – en i konsollvinduet og den andre på TestNG Resultatvinduet.

Kjører testen

Kjører testen

Sjekker rapporter laget av TestNG

Konsollvinduet inn Eclipse gir en tekstbasert rapport av våre testcaseresultater mens TestNG Resultatvinduet gir oss et grafisk.

Sjekker rapporter opprettet av TestNG

Generering av HTML-rapporter

TestNG har muligheten til å generere rapporter i HTML-format.

Trinn 1: Etter å ha kjørt vår FirstTestNGFil som vi opprettet i forrige seksjon, høyreklikk på prosjektnavnet (FørstTestNGProject) i Project Explorer-vinduet og klikk deretter på alternativet "Refresh".

Generering av HTML-rapporter

Trinn 2: Legg merke til at en "test-output"-mappe ble opprettet. Utvid den og se etter en index.html-fil. Denne HTML-filen er en rapport med resultatene fra den siste testkjøringen.

Generering av HTML-rapporter

Trinn 3: Double-klikk på den index.html-filen for å åpne den Eclipsesin innebygde nettleser. Du kan oppdatere denne siden når som helst etter at du har kjørt testen på nytt ved å trykke F5 akkurat som i vanlige nettlesere.

Generering av HTML-rapporter

Merknader brukt i TestNG

I forrige seksjon har du blitt introdusert for @Test-kommentaren. Nå skal vi studere mer avanserte merknader og deres bruk.

Flere testtilfeller

Vi kan bruke flere @Test-kommentarer i en enkelt TestNG fil. Som standard kjøres metoder som er kommentert av @Test alfabetisk. Se koden nedenfor. Selv om metodene c_test, a_test og b_test ikke er ordnet alfabetisk i koden, vil de bli utført som sådan.

Merknader brukt i TestNG

Kjør denne koden og klikk på "Kronologisk visning" på den genererte index.html-siden.

Merknader brukt i TestNG

Parametre

Hvis du vil at metodene skal utføres i en annen rekkefølge, bruk parameteren "prioritet". Parametere er nøkkelord som endrer merknadens funksjon.

  • Parametre krever at du tilordner en verdi til dem. Du gjør dette ved å plassere en "=" ved siden av dem, og deretter etterfulgt av verdien.
  • Parametre er omsluttet av et par parenteser som er plassert rett etter merknaden som kodebiten vist nedenfor.

Parametre

TestNG vil utføre @Test-kommentaren med den laveste prioritetsverdien opp til den største. Det er ikke nødvendig at dine prioriterte verdier er fortløpende.

Parametre

Ocuco TestNG HTML-rapport vil bekrefte at metodene ble utført basert på stigende prioritetsverdi.

Parametre

Flere parametere

Bortsett fra "prioritet", har @Test en annen parameter kalt "alwaysRun" som bare kan settes til enten "true" eller "false." For å bruke to eller flere parametere i en enkelt merknad, skille dem med et komma slik som den vist nedenfor.

@Test(priority = 0, alwaysRun = true)

Flere parametere

@BeforeTest og @AfterTest

@FørTest metoder under denne merknaden vil bli utført før den første testsaken i TestNG fil.
@Ettertest metoder under denne merknaden vil bli utført etter alle testtilfeller i TestNG filen kjøres.

Tenk på koden nedenfor.

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     
     @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          driver = new FirefoxDriver();
          driver.get(baseUrl);
      }
      @Test
      public void verifyHomepageTitle() {
          String expectedTitle = "Welcome: Mercury Tours";
          String actualTitle = driver.getTitle();
          Assert.assertEquals(actualTitle, expectedTitle);
     }
      @AfterTest
      public void terminateBrowser(){
          driver.close();
      }
}

Ved å bruke logikken presentert av tabellen og koden ovenfor, kan vi forutsi at sekvensen som metodene vil bli utført med er:

  • 1st – launchBrowser()
  • 2nd – verifyHomepageTitle()
  • 3rd – terminateBrowser()

Plasseringen av merknadsblokkene kan byttes uten å påvirke den kronologiske rekkefølgen de vil bli utført i. La oss forstå med en TestNG Eksempel og prøv å omorganisere merknadsblokkene slik at koden din vil se ut som den nedenfor.

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class firsttestngfile {
    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     @AfterTest                            //Jumbled
      public void terminateBrowser(){
          driver.close();
      }
     @BeforeTest                            //Jumbled
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          driver = new FirefoxDriver();
          driver.get(baseUrl);
      }
      @Test                                //Jumbled
      public void verifyHomepageTitle() {
          String expectedTitle = "Welcome: Mercury Tours";
          String actualTitle = driver.getTitle();
          Assert.assertEquals(actualTitle, expectedTitle);
     }
      
}

Kjør koden ovenfor og legg merke til det

Flere parametere

@BeforeMethod og @AfterMethod

@BeforeMethod metoder under denne merknaden vil bli utført før hver metode i hvert testtilfelle.
@AfterMethod metoder under denne merknaden vil bli utført etter hver metode i hvert testtilfelle.

In Mercury Omvisninger, anta at vi liker å bekrefte titlene på målsidene til de to koblingene nedenfor.

Flere parametere

Flyten av testen vår vil være:

  • Gå til hjemmesiden og bekreft tittelen.
  • Klikk REGISTRER og bekreft tittelen på målsiden.
  • Gå tilbake til hjemmesiden og kontroller om den fortsatt har riktig tittel.
  • Klikk STØTTE og bekreft tittelen på målsiden.
  • Gå tilbake til hjemmesiden og kontroller om den fortsatt har riktig tittel.

Koden nedenfor illustrerer hvordan @BeforeMethod og @AfterMethod brukes til å effektivt utføre scenariet nevnt ovenfor.

package firsttestngpackage;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
@Test
public class firsttestngfile {
    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver; 
    public String expected = null;
    public String actual = null;
        @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          driver= new FirefoxDriver();
          driver.get(baseUrl);
      }
      
      @BeforeMethod
      public void verifyHomepageTitle() {
          String expectedTitle = "Welcome: Mercury Tours";
          String actualTitle = driver.getTitle();
          Assert.assertEquals(actualTitle, expectedTitle);
      }
          @Test(priority = 0)
      public void register(){
          driver.findElement(By.linkText("REGISTER")).click() ;
          expected = "Register: Mercury Tours";
          actual = driver.getTitle();
          Assert.assertEquals(actual, expected);
      }
          @Test(priority = 1)
      public void support() {
            driver.findElement(By.linkText("SUPPORT")).click() ;
            expected = "Under Construction: Mercury Tours";
            actual = driver.getTitle();
            Assert.assertEquals(actual, expected);
      }
      @AfterMethod
      public void goBackToHomepage ( ) {
            driver.findElement(By.linkText("Home")).click() ;
      }
       
      @AfterTest
      public void terminateBrowser(){
          driver.close();
      }
}

Etter å ha utført denne testen, vil din TestNG skal rapportere følgende sekvens.

Flere parametere

Enkelt sagt, @BeforeMethod bør inneholde metoder som du trenger for å kjøre før du hvert testtilfelle mens @AfterMethod skal inneholde metoder som du må kjøre etter hvert testtilfelle.

Oppsummering av TestNG Merknader

@BeforeSuite: Den kommenterte metoden kjøres før alle testene i denne suiten er kjørt.

@AfterSuite: Den kommenterte metoden kjøres etter at alle testene i denne suiten er kjørt.

@FørTest: Den kommenterte metoden kjøres før en testmetode som tilhører klassene inne i taggen kjøres.

@Ettertest: Den kommenterte metoden vil bli kjørt etter at alle testmetodene som tilhører klassene inne i taggen har kjørt.

@BeforeGroups: Listen over grupper som denne konfigurasjonsmetoden vil kjøre før. Denne metoden vil garantert kjøre kort tid før den første testmetoden som tilhører noen av disse gruppene påberopes.

@AfterGroups: Listen over grupper som denne konfigurasjonsmetoden vil kjøre etter. Denne metoden vil garantert kjøre kort tid etter at den siste testmetoden som tilhører noen av disse gruppene er påkalt.

@BeforeClass: Den kommenterte metoden kjøres før den første testmetoden i gjeldende klasse startes.

@Etter timen: Den kommenterte metoden kjøres etter at alle testmetodene i gjeldende klasse er kjørt.

@BeforeMethod: Den kommenterte metoden kjøres før hver testmetode.

@AfterMethod: Den kommenterte metoden kjøres etter hver testmetode.

@Test: Den kommenterte metoden er en del av en testcase

Konklusjon

  • TestNG er en testing rammeverk som er i stand til å lage Selenium tester lettere å forstå og genererer rapporter som er enkle å forstå.
  • De viktigste fordelene ved TestNG enn JUnit er følgende.
    • Merknader er lettere å bruke og forstå.
    • Testtilfeller kan grupperes lettere.
    • TestNG lar oss skape parallelle tester.
  • Konsollvinduet inn Eclipse genererer et tekstbasert resultat mens TestNG vinduet er mer nyttig fordi det gir oss en grafisk utgang av testresultatet pluss andre meningsfulle detaljer som:
    • Kjøretider for hver metode.
    • Den kronologiske rekkefølgen metodene ble utført etter
  • TestNG er i stand til å generere HTML-baserte rapporter.
  • Merknader kan bruke parametere akkurat som de vanlige Java TestNG metoder.
  • TestNG Dataleverandør er en måte å sende parametere inn i testfunksjonen som sender forskjellige verdier i testtilfeller i en enkelt utførelse.