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 браузер.
- Второй способ (запуск Google) утверждает, что запуск Google.com происходит в инициализированном браузере.
- Третий способ (peformSeachAndClick1stLink)состояния, которые выполняют поиск в поле поиска (с помощью 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, упомянутом ниже.
Здесь вы можете видеть, что тестовые примеры имеют приоритет. Тестовые случаи с более низким приоритетом выполняются первыми, т.е. теперь в тестовых случаях происходит последовательное выполнение в соответствии с приоритетом. Следовательно, все тестовые случаи сейчас проходят успешно.
Обратите внимание на консоль затмения:
Результат :
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» и выполняет их соответственно.
Сочетание приоритетных (имеющих одинаковый приоритет) и неприоритетных методов.
В этом случае мы рассмотрим два случая в одном классе тестирования.
- Методы, имеющие одинаковое значение приоритета.
- Более одного неприоритетных методов.
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 в качестве инструмента запуска.
Это руководство стало возможным благодаря вкладу Рамандипа Сингха и Рамы. Krishna Гадде