TestNG @Приоритет тестирования в Selenium

TestNG — это Тестирование Framework, которая охватывает различные типы тестовых проектов, такие как модульный тест, функциональный тест, сквозной тест, тест пользовательского интерфейса и интеграционный тест.

Вы можете запустить один или несколько тестовых случаев в своем TestNG код.

Если приоритет теста не определен при запуске нескольких тестовых случаев, TestNG присваивает всем @Test приоритет, равный нулю (0).

Теперь, во время бега; более низкие приоритеты будут запланированы в первую очередь.

Демо кода TestNG без приоритета

Давайте возьмем сценарий, в котором для прохождения всех тестовых случаев потребуется секвенирование:

Сценарий: Создайте код, в котором вам необходимо выполнить поиск в Google по определенному ключевому слову, например «Facebook». Теперь убедитесь, что заголовок браузера изменен на «Facebook – Google Search».

Примечание. Каждый шаг, который вы кодируете, должен быть в отдельных методах.

Метод 1: Откройте браузер, произнесите Firefox (открытый браузер())

Метод 2: Запустите Google.com (запуск Google()).

Метод 3: выполнить поиск с помощью «Facebook» (performSearchAndClick1stLink()).

Метод 4: Проверьте заголовок страницы поиска Google (FaceBookPageTitleVerification()).

Код для нашего сценария:

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

Объяснение кода

Как упоминалось выше, мы создали 4 тестовых примера для выполнения каждого действия в независимых методах.

  • Первый способ (открыть браузер) состояния для инициализации Firefox browser.
  • Второй способ (запуск Google) утверждает, что запуск Google.com происходит в инициализированном браузере.
  • Третий способ (peformSeachAndClick1stLink)штаты, которые выполняют поиск в поиске box (с XPath («.//*[@title='Поиск']») с поисковым запросом как Facebook и
  • Четвертый и последний способ (FaceBookPageTitleVerification) утверждает, что щелкните значок поиска Google и убедитесь, что заголовок браузера был изменен на Facebook – Поиск Google.

Теперь запустите этот код с помощью testNG, как показано в видео, и вы найдете все Тестовый кейс терпят неудачу. Причина неудачи: поскольку существует зависимость от прохождения предыдущего тестового примера, будет пройден только текущий запущенный тестовый пример.

В этом случае,

  • Первый метод, который выполняется: открытыйБраузер(). Он был принят, потому что у него нет никакой зависимости.
  • Второй выполненный метод: 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);				
    }		
}

Объяснение кода

После назначения приоритета каждому тестовому набору запустите приведенный выше код с помощью 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» и выполняет их соответственно.

Сочетание приоритетных (имеющих одинаковый приоритет) и неприоритетных методов.

В этом случае мы рассмотрим два случая в одном классе тестирования.

  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» были одинаковыми, при тестировании учитывался алфавитный порядок имен их методов. Таким образом, между ними сначала выполнялось «a», а затем «d».

С учетом регистра в TestNG

Для вашей информации существует стандартный синтаксис для определения приоритета в testNG, т.е. @Тест (приоритет=4), предположим, что вы определяете его в каком-то другом синтаксисе, скажем @Тест (ПРИОРИТЕТ=1) тогда ваша IDE покажет это как ошибку компиляции. См. изображение ниже:

С учетом регистра в TestNG

Заключение

Как вы видели, если требуется запустить набор тестовых примеров в определенной последовательности, это можно легко сделать, используя приоритет использование testNG в качестве инструмента запуска.

Это руководство стало возможным благодаря вкладу Рамандипа Сингха и Рамы Кришны Гадде.