Учебники

25) Приоритет тестового набора в TestNG

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

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

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

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

В этом уроке вы узнаете —

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

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

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

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

Способ 1. Откройте браузер, скажем, Firefox (openBrowser ())

Способ 2. Запустите Google.com (launchGoogle ())

Способ 3 : выполнить поиск с помощью «Facebook» (executeSearchAndClick1stLink ())

Способ 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 тестовых случая для выполнения каждого действия в независимых методах.

  • Первый метод (openBrowser) сообщает об инициализации браузера Firefox.
  • Второй метод (launchGoogle) утверждает, что запуск Google.com происходит в инициализированном браузере.
  • Третий метод (peformSeachAndClick1stLink) заявляет, что выполняет поиск в окне поиска (с помощью xpath («.//*[@title=’Search ‘]») с поисковым термином 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

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

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

Приоритет в 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, упомянутом ниже.

Здесь вы можете видеть, что тестовые случаи имеют приоритет. Сначала выполняются тестовые наборы с более низким приоритетом, т.е. теперь выполняется последовательное выполнение в соответствии с приоритетом в тестовых случаях. Следовательно, все тесты проходят сейчас.

Обратите внимание на консоль затмения:

Выход :

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

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

Просто для вашей информации есть стандартный синтаксис для определения приоритета в testNG, то есть @Test (priority = 4) , предположим , что вы определяете его в каком-то другом синтаксисе, скажем @Test (PRIORITY = 1), тогда ваша IDE будет отображать его как ошибку компиляции , См. Изображение ниже:

Приоритет TestNG в тестовых случаях

Вывод:

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

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