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