Что такое TestNG?
TestNG — это среда тестирования автоматизации, в которой NG означает «Следующее поколение». TestNG вдохновлен JUnit, который использует аннотации (@). TestNG преодолевает недостатки JUnit и предназначен для упрощения сквозного тестирования.
Используя TestNG, вы можете сгенерировать правильный отчет и легко узнать, сколько тестовых примеров пройдено, не пройдено и пропущено. Вы можете выполнить неудачные тестовые случаи отдельно.
Например:
- Предположим, у вас есть пять тестовых случаев, один метод написан для каждого тестового случая (предположим, что программа написана с использованием основного метода без использования testNG). При первом запуске этой программы три метода успешно выполняются, а четвертый метод не выполняется. Затем исправьте ошибки, присутствующие в четвертом методе, теперь вы хотите запустить только четвертый метод, потому что первые три метода в любом случае выполняются успешно. Это невозможно без использования TestNG.
- TestNG предоставляет параметр, т. Е. Файл testng-failed.xml в папке test-output. Если вы хотите запускать только неудачные тесты, значит, вы запускаете этот XML-файл. Он будет выполнять только неудачные тестовые случаи.
Помимо приведенной выше концепции, вы узнаете больше о TestNG, например, каковы преимущества TestNG, как создавать методы тестирования с использованием аннотаций @test, как преобразовывать эти классы в файл набора тестирования и выполнять через eclipse, а также из командной строки. ,
В этом уроке вы узнаете
- Зачем использовать TestNG с селеном?
- Преимущества TestNG перед JUnit
- Первый тестовый пример с использованием аннотаций
- Создание нового тестового файла TestNG
- Проверка отчетов, созданных TestNG
- Аннотации, используемые в TestNG
- Несколько тестовых случаев
- параметры
Зачем использовать TestNG с селеном?
Тесты Selenium по умолчанию не генерируют правильный формат для результатов теста. Используя TestNG, мы можем генерировать результаты теста.
Большинство пользователей Selenium используют это больше, чем Junit из-за его преимуществ. Есть так много возможностей TestNG, но мы остановимся только на самых важных, которые мы можем использовать в Selenium. Ниже приведены ключевые особенности TestNG
- Создайте отчет в правильном формате, включая количество выполненных тестов, количество пройденных тестов, количество неудачных тестов и количество пропущенных тестов.
- Несколько тестовых случаев можно сгруппировать проще, преобразовав их в файл testng.xml. В котором вы можете сделать приоритеты, какой тестовый пример должен быть выполнен первым.
- Один и тот же тестовый пример может быть выполнен несколько раз без циклов, просто используя ключевое слово «invocation count».
- Используя testng, вы можете выполнить несколько тестовых случаев в нескольких браузерах, то есть перекрестное тестирование.
- Среду тестирования можно легко интегрировать с такими инструментами, как Maven, Jenkins и т. Д.
- Аннотации, используемые в тестировании, очень легко понять, например: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver не имеет собственного механизма генерации отчетов. TestNG может генерировать отчет в удобочитаемом формате, как показано ниже.
- TestNG упрощает способ кодирования тестов. В наших тестах больше нет необходимости в методе static main. Последовательность действий регулируется простыми для понимания аннотациями, которые не требуют статичности методов.
- Невыполненные исключения автоматически обрабатываются TestNG без преждевременного завершения теста. Эти исключения сообщаются как неудачные шаги в отчете.
Преимущества TestNG перед JUnit
Есть три основных преимущества TestNG перед JUnit:
- Аннотации легче понять
- Тестовые случаи могут быть сгруппированы легче
- Возможно параллельное тестирование
Аннотации в TestNG — это строки кода, которые могут управлять выполнением метода под ними . Им всегда предшествует символ @. Очень ранний и быстрый пример показан ниже.
Аннотации будут обсуждаться позже в разделе «Аннотации, используемые в TestNG», поэтому вполне нормально, если вы просто еще не поняли приведенный выше пример. Сейчас просто важно отметить, что аннотации в TestNG легче кодировать и понимать, чем в JUnit.
Возможность параллельного запуска тестов доступна в TestNG, но не в JUnit, поэтому это более предпочтительная среда для тестеров, использующих Selenium Grid.
Первый тестовый пример с использованием аннотаций
Перед тем, как создать тестовый пример, мы должны сначала настроить новый проект TestNG в Eclipse и назвать его «FirstTestNGProject».
Создание нового проекта TestNG
Шаг 1: Нажмите Файл> Создать> Проект Java
Шаг 2: Введите «FirstTestNGProject» в качестве имени проекта и нажмите «Далее».
Шаг 3: Теперь мы начнем импортировать библиотеки TestNG в наш проект. Нажмите на вкладку «Библиотеки», а затем «Добавить библиотеку…»
Шаг 4. В диалоговом окне «Добавить библиотеку» выберите «TestNG» и нажмите «Далее».
Шаг 5: Нажмите Готово.
Вы должны заметить, что TestNG включен в список библиотек.
Шаг 6: Теперь мы добавим JAR-файлы, которые содержат Selenium API. Эти файлы находятся в драйвере клиента Java, который мы загрузили с http://docs.seleniumhq.org/download/, когда мы устанавливали Selenium и Eclipse в предыдущих главах.
Затем перейдите туда, куда вы поместили файлы Selenium JAR.
После добавления внешних файлов JAR ваш экран должен выглядеть следующим образом.
Шаг 7: Нажмите Finish и убедитесь, что наш FirstTestNGProject видим в окне Package Explorer Eclipse.
Создание нового тестового файла TestNG
Теперь, когда мы закончили настройку нашего проекта, давайте создадим новый файл TestNG.
Шаг 1: Щелкните правой кнопкой мыши на папке пакета «src», затем выберите New> Other…
Шаг 2: Нажмите на папку TestNG и выберите опцию «Класс TestNG». Нажмите кнопку «Далее.
Шаг 3: Введите значения, указанные ниже, в соответствующие поля ввода и нажмите Готово. Обратите внимание, что мы назвали наш Java-файл «FirstTestNGFile».
Eclipse должен автоматически создать шаблон для нашего файла TestNG, показанного ниже.
Кодирование нашего первого теста
Теперь давайте создадим наш первый контрольный пример , который проверит правильность домашней страницы Mercury Tours. Введите свой код, как показано ниже.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
Обратите внимание на следующее.
- TestNG не требует наличия метода main ().
- Методы не должны быть статичными.
- Мы использовали аннотацию @Test. @Test используется, чтобы сказать, что метод под ним является тестовым примером . В этом случае мы установили метод verifyHomepageTitle () в качестве нашего тестового примера, поэтому над ним мы поместили аннотацию @Test.
- Поскольку мы используем аннотации в TestNG, нам нужно было импортировать пакет org.testng.annotations. *.
- Мы использовали класс Assert. Класс Assert используется для проведения операций проверки в TestNG . Чтобы использовать его, нам нужно импортировать пакет org.testng.Assert.
У вас может быть несколько тестовых случаев (следовательно, несколько аннотаций @Test) в одном файле TestNG. Это будет более подробно рассмотрено позже в разделе «Аннотации, используемые в TestNG».
Выполнение теста
Чтобы запустить тест, просто запустите файл в Eclipse, как обычно. Eclipse предоставит два выхода — один в окне консоли, а другой в окне результатов TestNG.
Проверка отчетов, созданных TestNG
Окно консоли в Eclipse предоставляет текстовый отчет о результатах нашего теста, а окно результатов TestNG — графический.
Генерация отчетов HTML
TestNG имеет возможность генерировать отчеты в формате HTML.
Шаг 1: После запуска нашего FirstTestNGFile, который мы создали в предыдущем разделе, щелкните правой кнопкой мыши имя проекта (FirstTestNGProject) в окне Project Explorer, затем выберите опцию «Обновить».
Шаг 2. Обратите внимание, что папка «test-output» была создана. Разверните его и найдите файл index.html. Этот HTML-файл представляет собой отчет о результатах последнего теста.
Шаг 3: Дважды щелкните этот файл index.html, чтобы открыть его во встроенном веб-браузере Eclipse. Вы можете обновить эту страницу в любое время после повторного запуска теста, просто нажав F5, как в обычных веб-браузерах.
Аннотации, используемые в TestNG
В предыдущем разделе вы познакомились с аннотацией @Test. Теперь мы будем изучать более сложные аннотации и их использование.
Несколько тестовых случаев
Мы можем использовать несколько аннотаций @Test в одном файле TestNG. По умолчанию методы, аннотированные @Test, выполняются в алфавитном порядке. Смотрите код ниже. Хотя методы c_test, a_test и b_test расположены не в алфавитном порядке в коде, они будут выполнены как таковые.
Запустите этот код и на созданной странице index.html нажмите «Хронологическое представление».
параметры
Если вы хотите, чтобы методы выполнялись в другом порядке, используйте параметр «приоритет». Параметры — это ключевые слова, которые изменяют функцию аннотации .
- Параметры требуют, чтобы вы присвоили им значение. Вы делаете это, помещая «=» рядом с ними, а затем следует значение.
- Параметры заключены в пару круглых скобок, которые помещаются сразу после аннотации, как показано ниже.
TestNG выполнит аннотацию @Test с самым низким значением приоритета до самого большого. Нет необходимости, чтобы значения приоритетов были последовательными.
HTML-отчет TestNG подтвердит, что методы были выполнены на основе возрастающего значения приоритета.
Несколько параметров
Помимо «приоритета», @Test имеет еще один параметр с именем «AlwaysRun», который может быть установлен только в «true» или «false». Чтобы использовать два или более параметров в одной аннотации, разделите их запятой, такой как показано ниже.
@Test(priority = 0, alwaysRun = true)
@BeforeTest и @AfterTest
@BeforeTest |
методы под этой аннотацией будут выполняться до первого контрольного примера в файле TestNG . |
@AfterTest |
методы под этой аннотацией будут выполняться после выполнения всех тестовых примеров в файле TestNG . |
Рассмотрим код ниже.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @AfterTest public void terminateBrowser(){ driver.close(); } }
Применяя логику, представленную таблицей и приведенным выше кодом, мы можем предсказать, что последовательность выполнения методов будет следующей:
- 1- й — launchBrowser ()
- 2- й — verifyHomepageTitle ()
- 3- й — terminateBrowser ()
Размещение блоков аннотаций можно поменять местами, не влияя на хронологический порядок их выполнения . Например, попробуйте переставить блоки аннотаций так, чтобы ваш код выглядел аналогично приведенному ниже.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test //Jumbled public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } }
Run the code above and notice that
@BeforeMethod and @AfterMethod
@BeforeMethod |
methods under this annotation will be executed prior to each method in each test case. |
@AfterMethod |
methods under this annotation will be executed after each method in each test case. |
In Mercury Tours, suppose we like to verify the titles of the target pages of the two links below.
The flow of our test would be:
- Go to the homepage and verify its title.
- Click REGISTER and verify the title of its target page.
- Go back to the homepage and verify if it still has the correct title.
- Нажмите «ПОДДЕРЖКА» и проверьте заголовок целевой страницы.
- Вернитесь на домашнюю страницу и проверьте правильность заголовка.
Приведенный ниже код иллюстрирует, как @BeforeMethod и @AfterMethod используются для эффективного выполнения сценария, упомянутого выше.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; @Test public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver= new FirefoxDriver(); driver.get(baseUrl); } @BeforeMethod public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @Test(priority = 0) public void register(){ driver.findElement(By.linkText("REGISTER")).click() ; expected = "Register: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @Test(priority = 1) public void support() { driver.findElement(By.linkText("SUPPORT")).click() ; expected = "Under Construction: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @AfterMethod public void goBackToHomepage ( ) { driver.findElement(By.linkText("Home")).click() ; } @AfterTest public void terminateBrowser(){ driver.close(); } }
После выполнения этого теста ваш TestNG должен сообщить о следующей последовательности.
Проще говоря, @BeforeMethod должен содержать методы, которые нужно запускать перед каждым тестовым примером, а @AfterMethod должен содержать методы, которые нужно запускать после каждого тестового случая.
Краткое содержание аннотаций TestNG
@BeforeSuite : аннотированный метод будет запущен до запуска всех тестов в этом наборе.
@AfterSuite : аннотированный метод будет запущен после выполнения всех тестов в этом наборе.
@BeforeTest : аннотированный метод будет запущен до запуска любого тестового метода, принадлежащего классам внутри тега.
@AfterTest : аннотированный метод будет запущен после запуска всех тестовых методов, принадлежащих классам внутри тега.
@BeforeGroups : список групп, которые этот метод конфигурации будет запускать раньше. Этот метод гарантированно будет запущен незадолго до того, как будет вызван первый тестовый метод, принадлежащий любой из этих групп.
@AfterGroups : список групп, после которых будет запускаться этот метод конфигурации. Этот метод гарантированно будет запущен вскоре после вызова последнего метода тестирования, принадлежащего любой из этих групп.
@BeforeClass : аннотированный метод будет запущен до вызова первого тестового метода в текущем классе.
@AfterClass : аннотированный метод будет запущен после запуска всех тестовых методов в текущем классе.
@BeforeMethod : аннотированный метод будет запускаться перед каждым тестовым методом.
@AfterMethod : аннотированный метод будет запускаться после каждого метода тестирования.
@Test : аннотированный метод является частью теста
Вывод
- TestNG — это инфраструктура тестирования, способная облегчить понимание тестов Selenium и генерировать отчеты, которые легко понять.
- Основными преимуществами TestNG перед JUnit являются следующие.
- Аннотации проще в использовании и понимании.
- Тестовые случаи могут быть сгруппированы более легко.
- TestNG позволяет нам создавать параллельные тесты.
- Окно консоли в Eclipse генерирует текстовый результат, в то время как окно TestNG является более полезным, поскольку оно дает нам графический вывод результата теста плюс другие значимые детали, такие как:
- Время выполнения каждого метода.
- Хронологический порядок выполнения методов
- TestNG способен генерировать отчеты на основе HTML.
- Аннотации могут использовать параметры так же, как обычные методы Java.