TestNG @Test Priority in Selenium
TestNG е Тестване рамка, която обхваща различни видове тестови дизайни като единичен тест, функционален тест, тест от край до край, тест на потребителския интерфейс и тест за интеграция.
Можете да стартирате един или няколко тестови случая във вашия Testng код.
Ако приоритетът на теста не е определен, докато се изпълняват множество тестови случаи, TestNG присвоява на всички @Test приоритет като нула (0).
Сега, докато бягате; по-ниските приоритети ще бъдат планирани първи.
Демо на TestNG код без приоритет
Нека вземем сценарий, при който ще е необходима последователност, за да преминат всички тестови случаи:
Сценарий: Генерирайте код, където се изисква да извършите Google търсете с конкретна ключова дума, например „Facebook“. Сега проверете дали заглавието на браузъра е променено на „Facebook – Google Търсене“.
Забележка: Всяка стъпка, която кодирате, трябва да бъде в отделни методи
Метод 1: Отворете браузъра, кажете Firefox (openBrowser())
Метод 2Стартиране Google.com (стартиранеGoogle())
Метод 3: Извършете търсене с помощта на „Facebook“ (performSearchAndClick1stLink())
Метод 4Проверка Google заглавие на страницата за търсене (FaceBookPageTitleVerification())
Code за нашия сценарий:
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);
}
}
Обяснение на Code
Както бе споменато по-горе, създадохме 4 тестови случая за извършване на всяко действие в независим метод.
- Първият метод (openBrowser) състояния за инициализиране Firefox браузър.
- Вторият метод (стартиранеGoogle) щати, които стартират Google.com е в инициализирания браузър.
- Третият метод (peformSeachAndClick1stLink)състояния, които извършват търсене в полето за търсене (с xpath (“.//*[@title='Търсене']”) с дума за търсене като Facebook намлява
- Четвъртият и последен метод (FaceBookPageTitleVerification) щати, които кликват върху иконата за търсене на Google и проверете дали заглавието на браузъра е променено на Facebook - Google Търсене.
Сега стартирайте този код с помощта на testNG, както е показано във видеото, ще намерите всичко Тестов случай се провалят. Причината за неуспеха: тъй като има зависимост от преминаване на предишен тестов случай, ще бъде преминат само текущият изпълняващ се тестов случай.
В такъв случай,
- Първият метод, който се изпълнява е openBrowser(). Беше преминато, защото няма никаква зависимост.
- Вторият изпълнен метод е FaceBookPageTitleVerification(); не успява, защото се опитваме да щракнем върху бутона за търсене и да проверим заглавието на браузъра.
- Можете да видите, че ако дейността по търсене не се обработва, тогава как всяка друга стъпка може да бъде премината. Следователно това е причината моите тестови случаи да се провалят.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Демо на TestNG код без приоритет по азбучен ред
Ако не споменем никакъв приоритет, testng ще изпълни методите @Test въз основа на азбучен ред на техните имена на методи, независимо от мястото им на имплементация в кода.
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");
}
}
Продукция
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
Въпреки че дефинирахме методите по произволен начин (c, b, a, e, d), testng изпълни методите въз основа на техните имена на методи, като взе предвид азбучния ред и същото беше отразено и в изхода.
Как да зададете приоритет в TestNG
Както видяхте в предишния пример, че се изисква последователност, за да премине този сценарий, така че ще модифицираме предишната част от кода с Параметър за приоритет така че всеки тест да се изпълнява спрямо зададения му приоритет.
Сега, както можете да видите, сме присвоили приоритета на всеки тестов случай, което означава, че първо ще се изпълни тестовият случай със стойност с по-нисък приоритет.
Приоритет в testNG в действие
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);
}
}
Обяснение на Code
След като зададете приоритет на всеки тестов случай, изпълнете горния код, като използвате testNG, както е показано във видео-2, споменато по-долу.
Тук можете да видите, че тестовите случаи са с приоритет. Тестовите случаи с по-нисък приоритет се изпълняват първи, т.е. сега има последователно изпълнение според приоритета в тестовите случаи. Следователно всички тестови случаи преминават сега.
Обърнете внимание на конзолата на eclipse:
Продукция :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Число 0 има най-висок приоритет (то ще бъде изпълнено първо) и приоритетът продължава въз основа на даденото число, т.е. 0 има най-висок приоритет от 1. 1 има най-висок приоритет от 2 и т.н.
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");
}
}
Продукция
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
Тук сме предоставили приоритетите като 0,1,3,6,9. Така първо се изпълнява метод с приоритет 0, а след това метод с приоритет-1 и т.н. Тук името на метода по азбучен ред няма да бъде взето предвид, тъй като предоставихме приоритетите
Методи със същия приоритет
Възможно е методите да имат същия приоритет. В тези случаи testng разглежда азбучния ред на имената на методите, чийто приоритет е същият.
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");
}
}
Продукция
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
Тук "e" и "d" се изпълняват въз основа на техните приоритетни стойности. Но методите 'a' и 'c' съдържат една и съща стойност на приоритет (6). И така, тук testng разглежда азбучния ред на 'a' и 'c' и ги изпълнява съответно.
Комбиниране както на приоритетни (с еднакъв приоритет), така и на неприоритетизирани методи
В този случай ще покрием два случая в един testng клас.
- Методи с еднаква приоритетна стойност.
- Повече от един метод без приоритет.
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");
}
}
Изход:
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
Обяснение:
Първо предпочитание: Методи без приоритет: 'c' и 'b': Въз основа на азбучен ред първо се изпълни 'b' и след това 'c'.
Второ предпочитание: Методи с приоритет: 'a', 'e' и 'd': 'e' беше изпълнено първо, тъй като имаше най-висок приоритет (0). Тъй като приоритетът на методите „a“ и „d“ беше еднакъв, testng взе предвид азбучния ред на имената на техните методи. И така, между тях първо беше изпълнено 'a' и след това 'd'.
Регистърът е чувствителен към TestNG
Само за ваша информация има стандартен синтаксис за определяне на приоритет в testNG, т.е @Test (приоритет=4), да предположим, че го дефинирате в някакъв друг синтаксис @Тест (ПРИОРИТЕТ=1) тогава вашето IDE ще го покаже като грешка при компилация. Вижте изображението по-долу:
Заключение
Както видяхте, ако има изискване за изпълнение на набор от тестови случаи в определена последователност, тогава това може лесно да се направи с помощта Приоритет използване на testNG като инструмент за изпълнение.
Този урок е възможен благодарение на приноса на Ramandeep Singh и Rama Krishna Гаде

