Grupy w TestNG

TestNG to platforma testowa obejmujฤ…ca rรณลผne typy projektรณw testรณw, takie jak testy jednostkowe, funkcjonalne, kompleksowe, interfejsu uลผytkownika i integracyjne.

Moลผesz uruchomiฤ‡ jeden lub wiele pakietรณw (pakiet oznacza tutaj hermetyzacjฤ™ grupy klas w odpowiednim formacie dyrektorskim), tworzฤ…c XML i uruchamiajฤ…c go przez maven.

TestNG Grupy z przykล‚adem

Uลผywamy grup w Testowanie gdy,

  • Nie chcemy definiowaฤ‡ metod testowych osobno w rรณลผnych klasach (w zaleลผnoล›ci od funkcjonalnoล›ci) i
  • Jednoczeล›nie chcฤ™ zignorowaฤ‡ (nie wykonaฤ‡) niektรณre przypadki testowe, tak jakby nie istniaล‚y w kodzie.
  • Aby to wykonaฤ‡, musimy je pogrupowaฤ‡. Robi siฤ™ to za pomocฤ… mechanizmรณw โ€žincludeโ€ i โ€žexcludeโ€ obsล‚ugiwanych w testNG.

W poniลผszym przykล‚adzie pokazaliล›my skล‚adniฤ™ wykorzystania grup w pliku XML.

@Test (groups = { "bonding", "strong_ties" })

Tutaj uลผywamy dwรณch nazw grup, tj. โ€žbondingโ€ i โ€žstrong_tiesโ€ (sฤ… to logiczne nazwy, ktรณre moลผna zmieniฤ‡ wedล‚ug wล‚asnego uznania).

<groups> tag definiuje poczฤ…tek grup w formacie XML.

Dostosuj swรณj XML, aby wybraฤ‡ wspomnianฤ… grupฤ™ z klas testowych. Poniลผej omรณwiono skล‚adniฤ™ deklarowania grup w pliku XML, np

 <groups>		
   <run>		
    <include name="bonding" />		
   </run>		
  </groups>		

Zaล‚รณลผmy wiฤ™c, ลผe w klasie jest 10 metod testowych.

z nich,

  • 6 metod zostaล‚o oznaczonych w grupie โ€žwiฤ…zanieโ€ i
  • 4 sฤ… w grupie โ€žstrong_tiesโ€

Idฤ…c dalej, ustawimy maven/Java ล›cieลผkฤ™ i uลผyj Eclipse IDE, aby zademonstrowaฤ‡ uลผycie grup przy uลผyciu plikรณw XML w Java oparty na projekcie maven.

Utwรณrz XML dla TestNG z tagami

  • Plik XML (Extensible Markup Language) w ล›rodowisku Maven zawiera informacje o jednym lub wiฤ™kszej liczbie testรณw i jest zdefiniowany przez etykietka.
  • Informacje testowe w formacie XML sฤ… reprezentowane przez etykietka i moลผe zawieraฤ‡ jeden lub wiฤ™cej TestNG Klasy.
  • A Java klasa, ktรณra zawiera @Test adnotacja powyลผej metod badawczych jest zdefiniowana jako TestNG Metody.

Do zbudowania dziaล‚ajฤ…cego pliku XML testNG uลผywa siฤ™ wielu tagรณw w sekwencji , I

  • Pierwszy jest tag, ktรณry zawiera logicznฤ… nazwฤ™ definiujฤ…cฤ… peล‚ne informacje przekazywane testNG w celu wygenerowania raportu wykonania.
  • Drugi jestGuru 99 Smoke Test Demoโ€>, naleลผy zauwaลผyฤ‡, ลผe jest to logiczna nazwa zawierajฤ…ca informacje o raporcie wykonania testu, takie jak zaliczone, niezaliczone, pominiฤ™te przypadki testowe i inne informacje, takie jak caล‚kowity czas wykonania i informacje o grupie
  • Trzeci jestcom.group.guru99.TC_Class1โ€ />, com.group.guru99 to uลผywany pakiet, a nazwa klasy testowej to TC_Class1.
<?xml version="1.0" encoding="UTF-8" ?>	
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">	
 	<suite name="Suite">	
		<test name="Guru 99 Smoke Test Demo">	
			<groups>	
				<run>	
   					 <include name="strong_ties" />	
        		</run>	
       		</groups>	
			<classes>	
					<class name="com.group.guru99.TC_Class1" />	
           	</classes>	
		</test>	
  </suite>	

Bฤ™dziemy uลผywaฤ‡ tego kodu XML w nadchodzฤ…cym filmie podanym w poniลผszych sekcjach.

โ€žwykluczโ€ lub โ€žwล‚ฤ…czโ€ w testowym formacie XML

Zaล‚รณลผmy, ลผe uwaลผasz, ลผe uลผycie mechanizmu grupy jest skomplikowane. W takim przypadku XML testNG udostฤ™pnia funkcjonalnoล›ฤ‡ wykluczania/doล‚ฤ…czania testu.

Exclude Tag:  Syntax for exclude tag <exclude name="${TEST_CASE_NAME}" />
Include Tag:  Syntax for include tag <include name="${TEST_CASE_NAME}" />

Uwaga: Moลผemy wล‚ฤ…czyฤ‡/wyล‚ฤ…czyฤ‡ wiele przypadkรณw testowych jednoczeล›nie, co dziaล‚a rรณwnieลผ w przypadku Grup.

Uruchom TestNG Grupuj, doล‚ฤ…czaj, wykluczaj kod (pokaz wideo)

Wyjaล›nienie dotyczฤ…ce Java Code i XML z grupuj, wykluczaj i wล‚ฤ…czaj znacznik w formacie XML.

Scenariusz testowy: Uruchomiฤ‡ Guru99 demo witryny bankowej, po czym zweryfikuj kilka rzeczy na stronie logowania, wprowadลบ dane logowania i ponownie zweryfikuj kilka nowych rzeczy w aplikacji po zalogowaniu.

Uruchom TestNG Grupuj, uwzglฤ™dniaj, wykluczaj Code

Uwaga: Kaลผdy kodowany krok powinien byฤ‡ zadeklarowany w oddzielnych metodach, ale po wykonaniu wykona metody testowe w zaleลผnoล›ci od wpisรณw w pliku XML.

  • Metoda 1: Zainicjuj przeglฤ…darkฤ™ i uruchom adres URL (tc01LaunchURL())
  • Metoda 2: Sprawdลบ nagล‚รณwek strony logowania (tc02VerifyLaunchPage())
  • Metoda 3: Wprowadลบ nazwฤ™ uลผytkownika i hasล‚o w formularzu logowania (tc03EnterCredentials())
  • Metoda 4: Sprawdลบ obecnoล›ฤ‡ identyfikatora menedลผera na panelu uลผytkownika (tc04VerifyLoggedInPage())
  • Metoda 5: Sprawdลบ jeszcze kilka linkรณw na panelu uลผytkownika (tc05VerifyHyperlinks())

Code dla naszego scenariusza:

package com.group.guru99;	

import java.util.concurrent.TimeUnit;	

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 TC_Class1 {	
    public static final WebDriver webDriver = new FirefoxDriver();;	

    String launchPageHeading = "//h3[text()='Guru99 Bank']";	
    final String userName_element = "//input[@name='uid']", password_element = "//input[@name='password']",	
            signIn_element = "//input[@name='btnLogin']";	
    final String userName_value = "mngr28642", password_value = "ydAnate";	
    final String managerID = "//td[contains(text(),'Manger Id')]";	
    final String newCustomer = "//a[@href='addcustomerpage.php']", fundTransfer = "//a[@href='FundTransInput.php']";	

    /**	
     * This test case will initialize the webDriver	
     */	
    @Test(groups = { "bonding", "strong_ties" })	
    public void tc01LaunchURL() {	
        webDriver.manage().window().maximize();	
        webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);	
        webDriver.get("https://www.demo.guru99.com/V4/");	
    }	

    /**	
     * Will check the presence of Heading on Login Page	
     */	
    @Test(groups = { "bonding" })	
    public void tc02VerifyLaunchPage() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),	
                "Home Page heading is not displayed");	
        System.out.println("Home Page heading is displayed");	
    }	

    /**	
     * This test case will enter User name, password and will then click on	
     * signIn button	
     */	
    @Test(groups = { "bonding", "strong_ties" })	
    public void 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();	
    }	

    /**	
     * This test case will verify manger's ID presence on DashBoard	
     */	
    @Test(groups = { "strong_ties" })	
    public void tc04VerifyLoggedInPage() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),	
                "Manager ID label is not displayed");	
        System.out.println("Manger Id label is displayed");	
    }	

    /**	
     * This test case will check the presence of presence of New customer link	
     * And FundTransfer link in Left pannel	
     */	
    @Test(groups = { "bonding" })	
    public void tc05VerifyHyperlinks() {	
        Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),	
                "New customer hyperlink is not displayed");	
        System.out.println("New customer hyperlink is displayed");	

        Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),	
                "Fund Transfer hyperlink is not displayed");	
        System.out.println("Fund Transfer hyperlink is displayed");	
    }	

}	

Uwaga: dane uwierzytelniajฤ…ce sฤ… waลผne tylko przez 20 dni, wiฤ™c jeล›li sprรณbujesz uruchomiฤ‡ kod na komputerze lokalnym, moลผe wystฤ…piฤ‡ bล‚ฤ…d nieprawidล‚owych danych uwierzytelniajฤ…cych.

Wyjaล›nienie Code:

Jak wspomniano powyลผej, stworzyliล›my 5 przypadkรณw testowych do wykonania kaลผdej akcji niezaleลผnymi metodami.

Dla kaลผdej metody powiฤ…zaliล›my parametr grupowy z pewnฤ… wartoล›ciฤ….

Zasadniczo sฤ… to nazwy grup rรณลผnicujฤ…cych, tj. โ€žsilne wiฤ™ziโ€ i โ€žwiฤ™ziโ€.

  • Pierwsza i trzecia metoda sฤ… oznaczone jako โ€žwiฤ…zanieโ€, โ€žsilne_wiฤ™ziโ€, co oznacza, ลผe โ€‹โ€‹jeล›li XML zostanie zaktualizowany w dowolnej grupie, to Przypadek testowy bฤ™dzie dziaล‚aฤ‡.
  • Druga metoda jest oznaczona tylko do grupy โ€žpowiฤ…zaniaโ€, co oznacza, ลผe โ€‹โ€‹jeล›li XML zostanie zaktualizowany o grupฤ™ powiฤ…zania. Tylko w takim przypadku ten przypadek testowy zostanie uruchomiony.
  • Czwarty przypadek testowy jest oznaczony jako naleลผฤ…cy do grupy strong_ties, co oznacza, ลผe โ€‹โ€‹ten przypadek testowy zostanie uruchomiony tylko wtedy, gdy plik XML zostanie zaktualizowany o nazwฤ™ grupy strong_ties.
  • Ostatni, ale nie najmniej waลผny, piฤ…ty przypadek testowy jest doล‚ฤ…czony do grupy wiฤ…zania, co oznacza, ลผe โ€‹โ€‹ten przypadek testowy zostanie uruchomiony tylko wtedy, gdy XML zostanie zaktualizowany o nazwฤ™ grupy ล‚ฤ…czenia.

Ogรณlnie rzecz biorฤ…c, mamy 4 scenariusze;

Scenariusz 1: Chcemy uruchomiฤ‡ wszystkie przypadki testowe niezaleลผnie od nazwy grupy. W takim przypadku usuniemy tag Group z dziaล‚ajฤ…cego XML-a.

Scenariusz 2: Chcemy uruchomiฤ‡ kilka testรณw, ktรณre sฤ… zwiฤ…zane tylko z jednฤ… z grup, tj. strong_ties lub bonding. Zapoznaj siฤ™ z:

  • W tym filmie parametr Group jest komentowany na podstawie dziaล‚ajฤ…cego kodu XML. W zwiฤ…zku z tym zobaczysz, ลผe wszystkie przypadki testowe zostaล‚y wykonane.
  • W kontynuacji filmu, teraz umieล›ciliล›my nazwฤ™ grupy w formacie XML, moลผesz zobaczyฤ‡, ลผe dziaล‚ajฤ… tylko przypadki testowe specyficzne dla tej grupy.

Scenariusz 3: Uลผywamy mechanizmu Exclude, aby wykluczyฤ‡ przypadek testowy. Proszฤ™ zapoznaฤ‡ siฤ™ z filmem

  • Widzisz, ลผe uลผyliล›my wykluczenia kilku przypadkรณw testowych (tc02), zapisujฤ…c ich nazwy w dziaล‚ajฤ…cym formacie XML. W efekcie koล„cowym wspomniane przypadki testowe nie zostaล‚y uruchomione.

Scenariusz 4: Na koniec uลผywamy mechanizmu testรณw doล‚ฤ…czania, aby uwzglฤ™dniฤ‡ przypadki testowe (tc01LaunchURL, tc03EnterCredentials i tc05VerifyHyperlinks). Proszฤ™ zapoznaฤ‡ siฤ™ z filmem

W tym filmie zobaczysz, ลผe przypadki testowe wymienione w formacie XML dziaล‚ajฤ… tylko podczas wykonywania testu.

Proszฤ™ pobraฤ‡ kod z kodu dla powyลผszego przykล‚adu-

Pobierz powyลผsze Code

Wniosek

Poznaliล›my tutaj stosunkowo nowy sposรณb uruchamiania przypadkรณw testowych przy uลผyciu XML w projekcie Maven.

Na poczฤ…tek przedstawiliล›my krรณtkie wprowadzenie do testNG, a nastฤ™pnie przedstawiliล›my peล‚nฤ… specyfikacjฤ™ technicznฤ… grup, wykluczania i uwzglฤ™dniania.

Podsumuj ten post nastฤ™pujฤ…co: