Kuinka ajaa useita testitapauksia TestNG Sviitti

โšก ร„lykรคs yhteenveto

Suorita useita testitapauksia TestNG Sviitti Selenium voit kรคynnistรครค useita luokkia, paketteja tai alikokonaisuuksia yhdestรค testng.xml-tiedostosta. Tรคmรค ohje kattaa rinnakkaiset sรคikeet, pakettihierarkian, raportoinnin ja tekoรคlyn tuen moderneille TestNG 7.x-projektit.

  • ๐Ÿงต Rinnakkaislangat: Aseta thread-count ja parallel=โ€testsโ€ lyhentรครคksesi selainten ja pakettien kokonaissuoritusaikaa.
  • ๐Ÿ—‚๏ธ Suite-hierarkia: Ylรคtason testng.xml-tiedosto voi listata alitiedostojen merkinnรคt useiden pakettien ketjuttamiseksi yhteen liipaisimeen.
  • โš™๏ธ TestNG 7.x-valmis: Esimerkit ovat linjassa TestNG 7.10 ja Selenium 4 W3C-ajuria, jotka korvaavat vanhat FirefoxKuljettajan johdotus.
  • ๐Ÿ“Š ร„lykรคs raportointi: Selkeรคt tasot 1โ€“10 ja sรคhkรถpostitse lรคhetettรคvรคt HTML-raportit auttavat diagnosoimaan epรคonnistuneita rinnakkaissรคikeitรค nopeasti.
  • ๐Ÿค– Tekoรคlyn orkestrointi: Tekoรคlypohjaiset ajastimet jรคrjestรคvรคt uudelleen, yrittรคvรคt uudelleen ja sirpaloivat paketteja historiallisten flake- ja kestotietojen perusteella.

Suorita useita testitapauksia TestNG Sviitti Selenium

TestNG antaa sinun suorittaa testimetodeja, luokkia ja kokonaisia โ€‹โ€‹testipaketteja rinnakkain yhden projektin sisรคllรค. Rinnakkaissuoritus lyhentรครค kokonaisajoaikaa, koska sรคikeet aloittavat testit samanaikaisesti yksi toisensa jรคlkeen. Tรคssรค oppaassa selitetรครคn, kuinka useita luokkia (eri paketteja) suoritetaan kรคyttรคmรคllรค TestNG 7.x ja Selenium WebDriver.

Vaihe 1) Luominen a TestNG.xml-tiedosto testien suorittamiseen

Luo kokoonpano noudattamalla alla olevia ohjeita.

  1. Luo uusi projekti kohdassa Eclipse.
  2. Luo projektissa kaksi pakettia (nimeรค ne com.suite1 ja com.suite2).
  3. Luo luokka jokaiseen pakettiin (nimeรค ne Flipkart.java ja Snapdeal.java) ja kopioi alla oleva koodi vastaaviin luokkiin.
  4. Luo projektiisi uusi tiedosto ja nimeรค se testng.xml. Varmista, ettรค TestNG laajennus on asennettu (ohjeet saatavilla tรครคltรค). Testng.xml-tiedosto sisรคltรครค kaikki mรครคritykset, kuten luokkien nimet, testien nimet ja pakettien nimet.

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 password
    String password = "";

    // This method navigates to the Flipkart URL
    @BeforeClass
    public void init() {
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        driver.navigate().to("https://www.flipkart.com");
    }

    // Log in to 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 a 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();
        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 password
    String password = "";
    String pinCode = "";

    // This method navigates to the Snapdeal URL
    @BeforeClass
    public void init() {
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        driver.navigate().to("https://www.snapdeal.com");
    }

    @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();
    }

    @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();
        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="2" verbose="1" name="Gmail Suite" 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>

Lopullinen projektirakenne nรคyttรครค alla olevan esimerkin kaltaiselta.

Luominen TestNG.xml-tiedosto testin suorittamista varten

Vaihe 2) Rinnakkaissuoritus sisรครคn TestNG

Tallennettuasi yllรค olevan XML-tiedoston, seuraava vaihe on rinnakkaisten testien suorittaminen. Koodi nรคkyy alla.

Rinnakkaissuoritus sisรครคn TestNG

1) lankojen mรครคrรค: Mรครคrittรครค kuinka monta sรคikettรค TestNG voi kรคynnistyรค rinnakkaissuoritusta varten. Suurempi arvo suorittaa useampia testejรค kerralla, suorittimen rajaan asti.

2) monisanainen: Kirjaa suoritustiedot konsoliin. Sallitut arvot ovat vรคlillรค 1โ€“10. Suuremmat arvot tuottavat yksityiskohtaisempia ja hajautetumpia lokeja.

3) nimiSviitin nimi. Tรคssรค se on โ€Gmail Sviittiโ€.

4) rinnakkainenKertoo TestNG mitรค suoritetaan samanaikaisesti. Kelvollisia arvoja ovat testit, luokat, metodit tai instanssit. Oletusarvo on ei mitรครคn.

Napsauta hiiren kakkospainikkeella testng.xml-tiedostoa ja valitse Suorita nimellรค > TestNG SviittiKun se on valmis, nรคet yhdistetyt tulokset.

Kun suoritat yllรค olevan koodin, saat seuraavan tulosteen.

lรคhtรถ:

Rinnakkaissuoritus sisรครคn TestNG

1) Tiedostossa testng.xml mรครคritellyn paketin nimi.

Rinnakkaissuoritus sisรครคn TestNG

2) Tiedostossa testng.xml mรครคritellyn testin nimi.

Rinnakkaissuoritus sisรครคn TestNG

3) Tiedostossa testng.xml ilmoitetun luokan nimi.

Rinnakkaissuoritus sisรครคn TestNG

4) Metodinimet, jotka on merkitty @Test-tunnisteella .java-tiedostossa.

Rinnakkaissuoritus sisรครคn TestNG

Sama tyรถnkulku suoritetaan SnapDeal-testissรค, joten molemmat luokat suoritetaan rinnakkain.

Vaihe 3) Useiden pakettien suorittaminen yhdestรค pรครคtiedostosta testng.xml

Yleinen vaatimus suuremmissa projekteissa on useiden testng.xml-tiedostojen ketjuttaminen yhdeksi triggeriksi. TestNG 7.x tukee pรครคohjelmistoa, joka viittaa lapsiohjelmistoon suite-tiedosto merkintรถjรค, jotta jokainen lapsi voi sรคilyttรครค oman sรคikeiden mรครคrรคn, kuuntelijat ja parametrit. Tallenna jokainen lapsipaketti erikseen ja osoita sitten pรครคtiedosto sen polkuun. Suorita vain pรครคtiedosto osoitteesta Eclipse, Mavenin tai komentorivin kautta.

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parent Suite" parallel="tests" thread-count="4">
  <suite-files>
    <suite-file path="./flipkart-suite.xml"/>
    <suite-file path="./snapdeal-suite.xml"/>
  </suite-files>
</suite>

Tรคmรค malli pitรครค regressio-, savu- ja jรคrjenpitopaketit erillรครคn, mutta niitรค voidaan kรคyttรครค uudelleen. Voit myรถs kรคynnistรครค pรครคtiedoston Maven Surefiresta asettamalla <suiteXmlFile>parent-suite.xml</suiteXmlFile> laajennuksen kokoonpanon sisรคllรค, mikรค saa saman rinnakkaisen asettelun toimimaan jatkuvissa integraatioputkissa.

Vaihe 4) Rinnakkaistutkimuksen parhaat kรคytรคnnรถt TestNG toimii

  • Pin TestNG 7.x: Kรคyttรครค TestNG 7.10 tai uudempi, jossa on Selenium 4, jotta W3C-yhteensopivat ajurit toimivat yhdenmukaisesti eri sรคikeissรค.
  • Vรคltรค jaettua tilaa: Siirrรค web-ajuri kentรคn ThreadLocal-kohteeseen, jotta jokaisella sรคikeellรค on oma istuntonsa.
  • Sรคikeiden mรครคrรคn sรครคtรถ: Aloita suorittimen ytimien lukumรครคrรคstรค ja seuraa sitten sรคhkรถpostitse lรคhetettรคvรครค HTML-raporttia ja Gridin latautumista ennen sen nostamista.
  • Eristรค testidata: Kรคytรค yksilรถllisiรค kรคyttรคjiรค, ostoskoreja ja PIN-koodeja ketjua kohden, jotta kirjautumiset eivรคt koskaan tรถrmรครค toisiinsa.
  • Ota kuvakaappauksia epรคonnistumisen sattuessa: Kiinnitรค ne ITestListener nopeuttaa epรคtasaisten rinnakkaisajojen dekoodausta.
  • Kรคytรค tekoรคlyn apua: Tyรถkalut kuten Testim, mabl ja CodiumAI voivat merkitรค epรคtasaisia โ€‹โ€‹testejรค ja ehdottaa vakaita valitsimia ennen seuraavaa suoritusta.

Yhteenveto

Yllรค oleva esimerkki nรคyttรครค, miten sitรค kรคytetรครคn TestNG rinnakkaisten testien suorittamiseen. TestNG 7.x tarjoaa yhden XML-tiedoston useiden testiluokkien kรคynnistรคmiseen, useiden alipakettien linkittรคmiseen ja rinnakkaisten sรคikeiden virittรคmiseen, joten suuretkin Selenium projektit valmistuvat paljon nopeammin.

UKK

Aseta jokainen luokka omaan paikkaansa tagi tiedostossa testng.xml, aseta sitten parallel=โ€testsโ€ ja sรคikeiden mรครคrรคksi vรคhintรครคn 2. TestNG kรคynnistรครค molemmat testit erillisillรค sรคikeillรค, joten luokat suoritetaan samanaikaisesti perรคkkรคin.

Kyllรค. Luo pรครคtiedostojรคrjestelmรค, joka listaa sisรคllรค olevat alitiedostot. Jokainen alitiedostopolku suorittaa oman kokoonpanonsa. Kuvio toimii seuraavasti: Eclipse, Maven Surefire ja Gradle, ja sitรค tuetaan TestNG 6 ja siitรค eteenpรคin, mukaan lukien nykyinen 7.x-julkaisu.

parallel-attribuutti hyvรคksyy testit, luokat, metodit, instanssit tai ei yhtรครคn. Valitse testit, kun jokainen tagi on itsenรคinen, luokat koko luokan eristรคmiseen ja metodit, kun yksittรคiset @Test-metodit ovat sรคikeiden kanssa yhteensopivia. Oletusarvo on none, jolloin kaikki suoritetaan perรคkkรคin.

Kรคytรค ThreadLocalia tai alusta ajuri @BeforeMethod-lohkossa staattisen kentรคn sijaan. Jokaisella sรคiellรค on sitten oma selainistuntonsa, mikรค poistaa kilpailutilanteet, jotka aiheuttavat rinnakkaisia โ€‹โ€‹kaatumisia. TestNG kรคy Selenium Ruudukko.

Tekoรคlyorkestroijat tutkivat aiempien testien dataa ennustaakseen epรคonnistumisia, asettaakseen epรคvakaita testejรค karanteeniin ja jรคrjestรครคkseen hitaita uudelleen. Alustat, kuten Launchable, Testimja mabl kytketรครคn TestNG Joten todennรคkรถisimmin epรคonnistuvat paketit suoritetaan ensin, mikรค lyhentรครค takaisinkytkentรคsilmukoita jatkuvan integraation palvelimilla.

Kyllรค. Launchablen ja BuildPulsen tekoรคlypohjaiset ajoitustyรถkalut mittaavat historiallista kestoa ja sirpaloitumisnopeutta testiรค kohden ja jakavat sitten testng.xml-tiedoston tasapainotettuihin sirpaleihin. Jokainen sirpale toimii erillisellรค agentilla, joten kokonaiskelloaika lyhenee samalla kun rinnakkaiskรคyttรถ pysyy korkeana.

Tiivistรค tรคmรค viesti seuraavasti: