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.
- Metody mające tę samą wartość priorytetu.
- 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:
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

