TestNG @Priorytet testu w Selenium

TestNG jest Testy framework, który obejmuje różne typy projektów testów, takie jak test jednostkowy, test funkcjonalny, test kompleksowy, test interfejsu użytkownika i test integracyjny.

Możesz uruchomić jeden lub wiele przypadków testowych w pliku Testowanie kod.

Jeśli priorytet testu nie jest zdefiniowany podczas uruchamiania wielu przypadków testowych, TestNG przypisuje wszystkim @Test priorytet równy zero (0).

Teraz podczas biegu; niższe priorytety zostaną zaplanowane w pierwszej kolejności.

Demo TestNG kod bez priorytetu

Weźmy scenariusz, w którym do zaliczenia wszystkich przypadków testowych wymagane będzie sekwencjonowanie:

Scenariusz: Wygeneruj kod, w którym musisz wykonać czynność Google Wyszukaj konkretne słowo kluczowe, np. „Facebook”. Teraz sprawdź, czy tytuł przeglądarki zmienił się na „Facebook – Google Szukaj".

Uwaga: każdy kodowany krok powinien znajdować się w oddzielnych metodach

Metoda 1: Otwórz przeglądarkę, powiedzmy Firefox (Otwórz przeglądarkę())

Metoda 2: Początek Google.com (uruchomienieGoogle())

Metoda 3: Przeprowadź wyszukiwanie za pomocą „Facebook” (performSearchAndClick1stLink())

Metoda 4: Zweryfikuj Google tytuł strony wyszukiwania (FaceBookPageTitleVerification())

Code dla naszego scenariusza:

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

Wyjaśnienie Code

Jak wspomniano powyżej, stworzyliśmy 4 przypadki testowe do wykonania każdej akcji niezależnymi metodami.

  • Pierwsza metoda (Otwórz przeglądarkę) stany do inicjalizacji Firefox browser.
  • Druga metoda (początekGoogle) stany, które uruchamiają Google.com znajduje się w zainicjowanej przeglądarce.
  • Trzecia metoda (peformSeachAndClick1stLink)stany, które wykonują wyszukiwanie w polu wyszukiwania (z xpath („.//*[@title='Szukaj']”) z wyszukiwanym hasłem jako Facebook oraz
  • Czwarta i ostatnia metoda (Weryfikacja FaceBookPageTitle) stwierdza, że ​​kliknięcie ikony wyszukiwania Google i sprawdź, czy tytuł przeglądarki został zmieniony na Facebook - Google Szukaj.

Teraz uruchom ten kod za pomocą testuNG, jak pokazano na filmie. Znajdziesz tam wszystkie Przypadek testowy zawodzą. Powód niepowodzenia: ponieważ istnieje zależność od poprzedniego przypadku testowego do zaliczenia, zaliczony zostanie tylko bieżący działający przypadek testowy.

W tym przypadku,

  • Pierwszą wykonywaną metodą jest Otwórz przeglądarkę(). Zostało zaliczone, ponieważ nie ma żadnej zależności.
  • Druga wykonywana metoda to Weryfikacja tytułu strony FaceBook(); to się nie udaje, ponieważ próbujemy kliknąć przycisk wyszukiwania i zweryfikować tytuł przeglądarki.
  • Możesz zobaczyć, że jeśli działanie związane z wyszukiwaniem nie jest procesem, to w jaki sposób można przejść jakikolwiek inny krok. Dlatego właśnie dlatego moje przypadki testowe kończą się niepowodzeniem.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Demo TestNG kod bez priorytetu w porządku alfabetycznym

Jeśli nie podajemy priorytetu, testng wykona metody @Test zgodnie z kolejnością alfabetyczną nazw metod, niezależnie od miejsca ich implementacji w kodzie.

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");
}

}

Wydajność

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 

Chociaż zdefiniowaliśmy metody w sposób losowy (c, b, a, e, d), program testujący wykonał metody na podstawie ich nazw, uwzględniając kolejność alfabetyczną. To samo odzwierciedliło się również w wynikach.

Jak ustawić priorytet w TestNG

Jak widziałeś w poprzednim przykładzie, aby przejść ten scenariusz, wymagane jest sekwencjonowanie, dlatego zmodyfikujemy poprzedni fragment kodu za pomocą Parametr priorytetowy tak, aby każdy test działał zgodnie z przypisanym mu priorytetem.

Jak widać, przypisaliśmy priorytet każdemu przypadkowi testowemu, co oznacza, że ​​przypadek testowy zostanie wykonany jako pierwszy o niższym priorytecie.

Priorytet w testNG w działaniu

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

Wyjaśnienie Code

Po przypisaniu priorytetu każdemu przypadkowi testowemu uruchom powyższy kod za pomocą testNG, jak pokazano w filmie 2 poniżej.

Tutaj widać, że priorytety mają przypadki testowe. W pierwszej kolejności wykonywane są przypadki testowe o niższym priorytecie, tzn. teraz następuje sekwencyjne wykonywanie zgodnie z priorytetem w przypadkach testowych. Dlatego wszystkie przypadki testowe przechodzą teraz pomyślnie.

Zwróć uwagę na konsolę Eclipse:

Wydajność :

PASSED: openBrowser
PASSED: launchGoogle
PASSED: peformSearchAndClick1stLink
PASSED: FaceBookPageTitleVerification

Liczba 0 ma najwyższy priorytet (zostanie wykonana jako pierwsza) i priorytet będzie kontynuowany w oparciu o podaną liczbę, tj. 0 ma najwyższy priorytet niż 1. 1 ma najwyższy priorytet niż 2 i tak dalej.

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");
    }

}

Wydajność

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

Tutaj podaliśmy priorytety jako 0,1,3,6,9. Zatem najpierw wykonywana jest metoda mająca priorytet 0, a następnie metoda mająca priorytet 1 i tak dalej. Tutaj nazwa metody w kolejności alfabetycznej nie będzie brana pod uwagę, ponieważ podaliśmy priorytety

Metody o tym samym priorytecie

Istnieje możliwość, że metody mogą mieć ten sam priorytet. W takich przypadkach testng bierze pod uwagę kolejność alfabetyczną nazw metod, których priorytet jest taki sam.

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");
    }

}

Wydajność

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 

Tutaj 'e' i 'd' są wykonywane na podstawie ich wartości priorytetu. Ale metody 'a' i 'c' zawierają tę samą wartość priorytetu (6). Tak więc tutaj testng bierze pod uwagę kolejność alfabetyczną 'a' i 'c' i wykonuje je odpowiednio.

Łączenie metod priorytetowych (mających ten sam priorytet) i niepriorytetowych

W tym przypadku zajmiemy się dwoma przypadkami w jednej klasie testowej.

  1. Metody mające tę samą wartość priorytetu.
  2. Więcej niż jedna metoda niepriorytetowa.
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");
	}
}

Wyjście:

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

Wyjaśnienie:

Pierwsza preferencja: Metody bez priorytetów: „c” i „b”: W kolejności alfabetycznej najpierw wykonano „b”, a następnie „c”.

Druga preferencja: Metody priorytetowe: 'a', 'e' i 'd': 'e' zostało wykonane jako pierwsze, ponieważ miało najwyższy priorytet (0). Ponieważ priorytety metod 'a' i 'd' były takie same, testng wziął pod uwagę kolejność alfabetyczną nazw ich metod. Tak więc, między nimi, 'a' zostało wykonane jako pierwsze, a następnie 'd'.

Wielkość liter ma znaczenie w TestNG

Tylko dla twojej informacji, istnieje standardowa składnia definiowania priorytetu w testNG, tj. @Test (priorytet=4), załóżmy, że definiujesz to w innej składni, powiedzmy @Test (PRIORYTET=1) wtedy twoje IDE pokaże to jako błąd kompilacji. Zobacz obrazek poniżej:

Wielkość liter ma znaczenie w TestNG

Wniosek

Jak widziałeś, jeśli istnieje potrzeba uruchomienia zestawu przypadków testowych w określonej kolejności, można to łatwo zrobić za pomocą Priorytet używając testNG jako narzędzia uruchamiającego.

Ten samouczek powstał dzięki wkładowi Ramandeepa Singha i Ramy Krishna Niestety

Podsumuj ten post następująco: