TestNG Tutorial: În ce este Adnotările și Cadrul Selenium

Ce Este TestNG?

TestNG este un cadru de testare de automatizare în care NG înseamnă „Next Generation”. TestNG este inspirat de JUnit care folosește adnotările (@). TestNG depăşeşte dezavantajele JUnit și este conceput pentru a face testarea end-to-end ușor.

Utilizarea TestNG, puteți genera un raport adecvat și puteți afla cu ușurință câte cazuri de testare au fost trecute, eșuate și ignorate. Puteți executa cazurile de testare eșuate separat.

De exemplu:

  • Să presupunem că aveți cinci cazuri de testare, o metodă este scrisă pentru fiecare caz de testare (Să presupunem că programul este scris folosind metoda principală fără a utiliza testNG). Când executați mai întâi acest program, trei metode sunt executate cu succes, iar cea de-a patra metodă este eșuată. Apoi corectați erorile prezente în a patra metodă, acum doriți să rulați doar a patra metodă pentru că primele trei metode sunt oricum executate cu succes. Acest lucru nu este posibil fără utilizarea TestNG.
  • TestNG in Selenium oferă o opțiune, adică fișierul testng-failed.xml în folderul test-output. Dacă doriți să rulați numai cazuri de testare eșuate, înseamnă că rulați acest fișier XML. Va executa doar cazuri de testare nereușite.

Pe lângă conceptul de mai sus, veți afla mai multe despre TestNG, cum ar fi care sunt Avantajele TestNG, cum să creați metode de testare folosind adnotări @test, cum să convertiți aceste clase în fișierul suită de testare și să le executați prin eclipse, precum și din linia de comandă.

De ce folosiți TestNG cu Selenium?

Mod implicit Selenium testele nu generează un format adecvat pentru rezultatele testelor. Folosind TestNG in Selenium, putem genera rezultate ale testelor.

pod Selenium utilizatorii folosesc acest lucru mai mult decât Junit din cauza avantajelor sale. Există atât de multe caracteristici ale TestNG, dar ne vom concentra doar pe cele mai importante pe care le putem folosi Selenium. Următoarele sunt caracteristicile cheie ale Selenium TestNG:

  • Generați raportul într-un format adecvat, inclusiv un număr de cazuri de testare, numărul de cazuri de testare trecute, numărul de cazuri de testare nereușite și numărul de cazuri de testare omise.
  • Mai multe cazuri de testare pot fi grupate mai ușor prin conversia lor în fișierul testng.xml. În care puteți stabili priorități care caz de testare trebuie executat mai întâi.
  • Același caz de testare poate fi executat de mai multe ori fără bucle doar folosind cuvântul cheie numit „număr de invocari”.
  • Folosind testng, puteți executa mai multe cazuri de testare pe mai multe browsere, adică cross testarea browserului.
  • TestNG framework-ul poate fi ușor integrat cu instrumente precum TestNG Maven, Jenkins etc.
  • Adnotările folosite în testare sunt foarte ușor de înțeles, de exemplu: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver nu are un mecanism nativ pentru generarea de rapoarte. TestNG poate genera raportul într-un format care poate fi citit ca cel prezentat mai jos.
  • Utilizare TestNG cu Selenium

  • TestNG simplifică modul în care sunt codificate testele. Nu mai este nevoie de o metodă principală statică în testele noastre. Secvența acțiunilor este reglementată de adnotări ușor de înțeles care nu necesită ca metodele să fie statice.
  • Utilizare TestNG cu Selenium

    Utilizare TestNG cu Selenium

  • Excepțiile neprinse sunt gestionate automat de TestNG fără a termina testul prematur. Aceste excepții sunt raportate ca pași nereușiți în raport.

Avantajele TestNG peste JUnit

Există trei avantaje majore ale TestNG peste JUnit:

  • Adnotările sunt mai ușor de înțeles
  • Cazurile de testare pot fi grupate mai ușor
  • Este posibilă testarea în paralel

În ce este Adnotarea TestNG?

Adnotări în TestNG sunt linii de cod care pot controla modul în care va fi executată metoda de sub ele. Ele sunt întotdeauna precedate de simbolul @. Un foarte devreme și rapid TestNG Un exemplu este cel prezentat mai jos.

Adnotare în TestNG

Adnotările vor fi discutate mai târziu în secțiunea numită „Adnotări utilizate în TestNG,”deci este perfect ok dacă nu înțelegi cele de mai sus TestNG Exemplu încă. Este important doar să rețineți că, pentru moment, adnotările în TestNG sunt mai ușor de codat și de înțeles decât în JUnit.

Capacitatea de a rula teste în paralel este disponibilă în TestNG dar nu în JUnit, Astfel încât TestNG framework-ul este mai preferat pentru testeri Selenium Grilă.

Cum să scrieți cazuri de testare în TestNG?

Pas 1) Scrieți logica dvs. de afaceri și introduceți TestNG adnotări în codul dvs.
Pas 2) Adăugați mai multe informații precum numele clasei, numele grupurilor, numele pachetului etc
Pas 3) Pornește TestNG.

Creați un caz de testare folosind TestNG Adnotări

Acum, vom învăța cum să creăm primul nostru caz de testare folosind TestNG Adnotări în Selenium:

Înainte de a crea un caz de testare, ar trebui mai întâi să setăm unul nou TestNG Proiect în Eclipse și denumește-l ca „PrimulTestNGProiect".

Configurarea unui nou TestNG Proiect

Pasul 1: Faceți clic pe Fișier > Nou > Java Proiect

Configurarea unui nou TestNG Proiect

Pasul 2: Tastați „PrimulTestNGProiect” ca Nume Proiect, apoi faceți clic pe Următorul.

Configurarea unui nou TestNG Proiect

Pasul 3: Acum vom începe să importăm fișierul TestNG Biblioteci în proiectul nostru. Faceți clic pe fila „Biblioteci”, apoi pe „Adăugați o bibliotecă...”

Configurarea unui nou TestNG Proiect

Pasul 4: În caseta de dialog Adăugare bibliotecă, alegeți „TestNG”Și faceți clic pe Următorul.

Configurarea unui nou TestNG Proiect

Pasul 5: Faceți clic pe Finalizare.

Configurarea unui nou TestNG Proiect

Ar trebui să observi asta TestNG este inclus pe lista Biblioteci.

Configurarea unui nou TestNG Proiect

Pasul 6: Vom adăuga acum fișierele JAR care conțin fișierul Selenium API. Aceste fișiere se găsesc în Java driverul client de pe care l-am descărcat https://www.selenium.dev/downloads/ când instalam Selenium si Eclipse în capitolele precedente.

Configurarea unui nou TestNG Proiect

Apoi, navigați până unde ați plasat Selenium fișiere JAR.

Configurarea unui nou TestNG Proiect

După adăugarea JAR-urilor externe, ecranul dvs. ar trebui să arate astfel.

Configurarea unui nou TestNG Proiect

Pasul 7: Faceți clic pe Terminare și verificați că primul nostruTestNGProiectul este vizibil pe Eclipsefereastra Explorer de pachete a lui.

Configurarea unui nou TestNG Proiect

Cum se creează un nou TestNG Fișier de testare

Acum că am terminat de configurat proiectul nostru în asta TestNG tutorial, haideți să creăm un nou TestNG fișier.

Pasul 1: Faceți clic pe „src” și Alegeți altele.
Faceți clic dreapta pe folderul pachetului „src”, apoi alegeți Nou > Altele...

Creaza un nou TestNG Fișier de testare

Pasul 2: Selectați TestNG clasă.
Dati click pe TestNG folder și selectați „TestNG opțiunea de clasă”. Faceți clic pe Următorul.

Creaza un nou TestNG Fișier de testare

Pasul 3: Introduceți valorile.
Introduceți valorile indicate mai jos în casetele de introducere corespunzătoare și faceți clic pe Terminare. Observați că ne-am numit nostru Java fișier ca „PrimulTestNGFişier".

Creaza un nou TestNG Fișier de testare

Pasul 4: Șablon creat.
Eclipse ar trebui să creeze automat șablonul pentru nostru TestNG fișierul prezentat mai jos.

Creaza un nou TestNG Fișier de testare

Codificarea Primului nostru TestNG Exemplu de caz de testare

Să creăm acum primul nostru Caz de testare care va verifica dacă Mercury Pagina de pornire a Tours este corectă. Introduceți codul, așa cum se arată în mai jos TestNG Exemplu:

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 = "http://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();
  }
}

Observați următoarele.

  • TestNG nu necesită să aveți o metodă main().
  • Metodele nu trebuie să fie statice.
  • Am folosit adnotarea @Test. @Test este folosit pentru a spune că metoda de sub ea este un caz de testare. În acest caz, am setat metoda verifyHomepageTitle() să fie cazul nostru de testare, așa că am plasat o adnotare „@Test” deasupra acesteia.
  • Deoarece folosim adnotări în TestNG, trebuia să importăm pachetul org.testng.annotations.*.
  • Am folosit clasa Assert. Clasa Assert este folosită pentru a efectua operațiuni de verificare în TestNG. Pentru a-l folosi, trebuie să importam pachetul org.testng.Assert.

Este posibil să aveți mai multe cazuri de testare (prin urmare, mai multe adnotări @Test) într-un singur TestNG fişier. Acest lucru va fi abordat mai detaliat mai târziu în secțiunea „Adnotări utilizate în TestNG. "

Executarea testului

Pentru a rula testul, pur și simplu rulați fișierul în Eclipse așa cum faceți în mod normal. Eclipse va oferi două ieșiri – una în fereastra Consolă și cealaltă pe TestNG Fereastra rezultate.

Executarea testului

Executarea testului

Verificarea rapoartelor create de TestNG

Fereastra Consolă în Eclipse oferă un raport bazat pe text al rezultatelor cazului nostru de testare în timp ce TestNG Fereastra de rezultate ne oferă una grafică.

Verificarea rapoartelor create de TestNG

Generarea de rapoarte HTML

TestNG are capacitatea de a genera rapoarte în format HTML.

Pasul 1: După ce a rulat primul nostruTestNGFișierul pe care l-am creat în secțiunea anterioară, faceți clic dreapta pe numele proiectului (PrimulTestNGProject) în fereastra Project Explorer, apoi faceți clic pe opțiunea „Reîmprospătare”.

Generarea de rapoarte HTML

Pasul 2: Observați că a fost creat un folder „test-output”. Extindeți-l și căutați un fișier index.html. Acest fișier HTML este un raport al rezultatelor celei mai recente teste.

Generarea de rapoarte HTML

Pasul 3: Double-faceți clic pe acel fișier index.html pentru a-l deschide Eclipsebrowser-ul web încorporat. Puteți reîmprospăta această pagină oricând după ce ați reluat testul prin simpla apăsare a F5 la fel ca în browserele web obișnuite.

Generarea de rapoarte HTML

Adnotările utilizate în TestNG

În secțiunea anterioară, ați fost introdus în adnotarea @Test. Acum, vom studia adnotările mai avansate și utilizările lor.

Cazuri de testare multiple

Putem folosi mai multe adnotări @Test într-o singură TestNG fişier. În mod implicit, metodele adnotate de @Test sunt executate alfabetic. Vezi codul de mai jos. Deși metodele c_test, a_test și b_test nu sunt aranjate alfabetic în cod, ele vor fi executate ca atare.

Adnotările utilizate în TestNG

Rulați acest cod și pe pagina index.html generată, faceți clic pe „Vizualizare cronologică”.

Adnotările utilizate în TestNG

parametrii

Dacă doriți ca metodele să fie executate într-o ordine diferită, utilizați parametrul „prioritate”. Parametrii sunt cuvinte cheie care modifică funcția adnotării.

  • Parametrii necesită să le atribuiți o valoare. Faceți acest lucru plasând un „=" lângă ele, apoi urmat de valoare.
  • Parametrii sunt încadrați într-o pereche de paranteze care sunt plasate imediat după adnotare, ca fragmentul de cod prezentat mai jos.

parametrii

TestNG va executa adnotarea @Test cu cea mai mică valoare de prioritate până la cea mai mare. Nu este nevoie ca valorile dvs. prioritare să fie consecutive.

parametrii

TestNG Raportul HTML va confirma că metodele au fost executate pe baza valorii crescătoare a priorității.

parametrii

Parametri multipli

Pe lângă „prioritate”, @Test are un alt parametru numit „alwaysRun”, care poate fi setat doar la „adevărat” sau „fals”. Pentru a utiliza doi sau mai mulți parametri într-o singură adnotare, separați-i cu o virgulă precum cel prezentat mai jos.

@Test(priority = 0, alwaysRun = true)

Parametri multipli

@BeforeTest și @AfterTest

@BeforeTest metodele sub această adnotare vor fi executate înainte de primul caz de testare în TestNG fişier.
@AfterTest metodele sub această adnotare vor fi executate după toate cazurile de testare în TestNG fișierul sunt executate.

Luați în considerare codul de mai jos.

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 = "http://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();
      }
}

Aplicând logica prezentată de tabel și codul de mai sus, putem prezice că secvența prin care vor fi executate metodele este:

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

Amplasarea blocurilor de adnotare poate fi interschimbată fără a afecta ordinea cronologică în care vor fi executate.. Să înțelegem cu a TestNG Exemplu și încercați să rearanjați blocurile de adnotări astfel încât codul dvs. să arate similar cu cel de mai jos.

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 = "http://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);
     }
      
}

Rulați codul de mai sus și observați asta

Parametri multipli

@BeforeMethod și @AfterMethod

@BeforeMethod metodele sub această adnotare vor fi executate înainte de fiecare metodă în fiecare caz de testare.
@AfterMethod metodele sub această adnotare vor fi executate după fiecare metodă în fiecare caz de testare.

In Mercury Tururi, să presupunem că ne place să verificăm titlurile paginilor țintă ale celor două link-uri de mai jos.

Parametri multipli

Fluxul testului nostru ar fi:

  • Accesați pagina principală și verificați titlul acesteia.
  • Faceți clic pe ÎNREGISTRARE și verificați titlul paginii țintă.
  • Reveniți la pagina de pornire și verificați dacă mai are titlul corect.
  • Faceți clic pe ASISTENȚĂ și verificați titlul paginii țintă.
  • Reveniți la pagina de pornire și verificați dacă mai are titlul corect.

Codul de mai jos ilustrează modul în care @BeforeMethod și @AfterMethod sunt folosite pentru a executa eficient scenariul menționat mai sus.

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 = "http://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();
      }
}

După executarea acestui test, dvs TestNG ar trebui să raporteze următoarea secvență.

Parametri multipli

Pur și simplu, @BeforeMethod ar trebui să conțină metode pe care trebuie să le rulați înainte fiecare caz de testare în timp ce @AfterMethod ar trebui să conțină metode pe care trebuie să le rulați după fiecare caz de testare.

Rezumatul TestNG Adnotări

@BeforeSuite: Metoda adnotată va fi rulată înainte ca toate testele din această suită să fie rulate.

@AfterSuite: Metoda adnotată va fi rulată după ce toate testele din această suită au fost executate.

@BeforeTest: Metoda adnotată va fi rulată înainte de rularea oricărei metode de testare aparținând claselor din interiorul etichetei.

@AfterTest: Metoda adnotată va fi rulată după ce toate metodele de testare aparținând claselor din interiorul etichetei au fost rulate.

@BeforeGroups: Lista de grupuri pe care această metodă de configurare le va rula înainte. Se garantează că această metodă va rula cu puțin timp înainte ca prima metodă de testare care aparține oricăruia dintre aceste grupuri să fie invocată.

@AfterGroups: Lista de grupuri după care va rula această metodă de configurare. Această metodă este garantată să ruleze la scurt timp după ce ultima metodă de testare care aparține oricăruia dintre aceste grupuri este invocată.

@Înainte de curs: Metoda adnotată va fi rulată înainte ca prima metodă de testare din clasa curentă să fie invocată.

@După clasa: Metoda adnotată va fi rulată după ce toate metodele de testare din clasa curentă au fost rulate.

@BeforeMethod: Metoda adnotată va fi rulată înainte de fiecare metodă de testare.

@AfterMethod: Metoda adnotată va fi rulată după fiecare metodă de testare.

@Test: Metoda adnotată face parte dintr-un caz de testare

Concluzie

  • TestNG este de testare cadru care este capabil să facă Selenium teste mai ușor de înțeles și de a genera rapoarte ușor de înțeles.
  • Principalele avantaje ale TestNG peste JUnit sunt următoarele.
    • Adnotările sunt mai ușor de utilizat și de înțeles.
    • Cazurile de testare pot fi grupate mai ușor.
    • TestNG ne permite să creăm teste paralele.
  • Fereastra Consolă în Eclipse generează un rezultat bazat pe text în timp ce TestNG fereastra este mai utilă deoarece ne oferă o ieșire grafică a rezultatului testului plus alte detalii semnificative, cum ar fi:
    • Timpul de execuție al fiecărei metode.
    • Ordinea cronologică în care au fost executate metodele
  • TestNG este capabil să genereze rapoarte bazate pe HTML.
  • Adnotările pot folosi parametri la fel ca de obicei Java TestNG metode.
  • TestNG Furnizor de date este o modalitate de a trece parametri în funcția de testare care trece valori diferite în cazurile de testare într-o singură execuție.