TestNG @Test Priority в 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, як показано у Video-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.

  1. Методи з однаковим значенням пріоритету.
  2. Більш ніж один метод без пріоритету.
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), припустімо, що ви визначаєте його в якомусь іншому синтаксисі @Test (PRIORITY=1) тоді ваша IDE покаже це як помилку компіляції. Зверніться до зображення нижче:

Чутливий до регістру в TestNG

Висновок

Як ви бачили, якщо є вимога виконати набір тестів у певній послідовності, це можна легко зробити за допомогою Пріоритет використання testNG як інструменту запуску.

Цей підручник став можливим завдяки внеску Рамандіпа Сінгха та Рами Krishna Гадде

Підсумуйте цей пост за допомогою: