TestNG — это инфраструктура тестирования , которая охватывает различные типы тестов, такие как модульное тестирование, функциональное тестирование, сквозное тестирование, тестирование пользовательского интерфейса и интеграционное тестирование.
Вы можете запустить один или несколько тестовых случаев в своем коде Testng .
Если приоритет теста не определен во время выполнения нескольких тестовых случаев, TestNG назначает всем @Test приоритет как ноль (0).
Теперь во время бега; более низкие приоритеты будут запланированы первыми.
В этом уроке вы узнаете —
- Демо кода TestNG без приоритета
- Демо кода TestNG без приоритета в алфавитном порядке
- Как установить Приоритет в TestNG
- Методы с одинаковым приоритетом
- Объединение как приоритетных (имеющих одинаковый приоритет), так и неприоритетных методов
Демо кода 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.
- Методы, имеющие одинаковое значение приоритета.
- Более одного неприоритетного метода.
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 в качестве инструмента запуска.
Это руководство стало возможным благодаря вкладу Рамандипа Сингха и Рамы Кришны Гадде
