Учебное пособие по TestNG: что такое, аннотации и amp; Фреймворк в Selenium

Содержание:

Anonim

Что такое TestNG?

TestNG - это среда автоматизации тестирования, в которой NG означает «Следующее поколение». TestNG вдохновлен JUnit, который использует аннотации (@). TestNG преодолевает недостатки JUnit и разработан, чтобы упростить сквозное тестирование.

Используя TestNG, вы можете создать правильный отчет и легко узнать, сколько тестовых случаев выполнено, не выполнено и пропущено. Вы можете выполнить неудачные тестовые случаи отдельно.

Например:

  • Предположим, у вас есть пять тестовых примеров, для каждого тестового примера написан один метод (предположим, что программа написана с использованием основного метода без использования testNG). Когда вы запускаете эту программу первой, три метода выполняются успешно, а четвертый метод не работает. Затем исправьте ошибки, присутствующие в четвертом методе, теперь вы хотите запустить только четвертый метод, потому что первые три метода в любом случае выполняются успешно. Это невозможно без использования TestNG.
  • TestNG в Selenium предоставляет опцию, то есть файл testng-failed.xml в папке с тестовыми выводами. Если вы хотите запускать только неудачные тестовые примеры, значит, вы запускаете этот XML-файл. Он выполнит только неудачные тестовые примеры.

Помимо вышеуказанной концепции, вы узнаете больше о TestNG, например, о преимуществах TestNG, о том, как создавать методы тестирования с использованием аннотаций @test, как преобразовать эти классы в файл набора тестов и выполнить через eclipse, а также из командной строки. .

В этом руководстве по TestNG вы узнаете

  • Зачем использовать TestNG с Selenium?
  • Преимущества TestNG перед JUnit
  • Создание тестового примера с использованием аннотаций TestNG
  • Как создать новый тестовый файл TestNG
    • Кодирование нашего первого примера тестового примера TestNG
    • Запуск теста
  • Проверка отчетов, созданных TestNG
  • Аннотации, используемые в TestNG
  • Несколько тестовых случаев
  • Параметры
    • Несколько параметров
    • Сводка аннотаций TestNG

Зачем использовать TestNG с Selenium?

Тесты Selenium по умолчанию не генерируют правильный формат для результатов тестирования. Используя TestNG в Selenium, мы можем генерировать результаты тестирования.

Большинство пользователей Selenium используют его чаще, чем Junit из-за его преимуществ. В TestNG так много возможностей, но мы сосредоточимся только на самых важных из них, которые мы можем использовать в Selenium. Ниже приведены ключевые особенности Selenium TestNG:

  • Создайте отчет в надлежащем формате, включая количество выполненных тестовых примеров, количество пройденных тестовых примеров, количество неудачных тестовых случаев и количество пропущенных тестовых примеров.
  • Несколько тестовых случаев можно легко сгруппировать, преобразовав их в файл testng.xml. В котором вы можете установить приоритеты, какой тестовый пример должен быть выполнен первым.
  • Один и тот же тестовый пример может быть выполнен несколько раз без циклов, просто используя ключевое слово под названием «счетчик вызовов».
  • Используя testng, вы можете выполнять несколько тестовых примеров в нескольких браузерах, то есть кроссбраузерное тестирование.
  • Фреймворк TestNG можно легко интегрировать с такими инструментами, как TestNG Maven, Jenkins и т. Д.
  • Аннотации, используемые в тестировании, очень легко понять, например: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver не имеет собственного механизма для создания отчетов. TestNG может сгенерировать отчет в удобочитаемом формате, подобном показанному ниже.
  • TestNG упрощает кодирование тестов. В наших тестах больше нет необходимости в статическом основном методе. Последовательность действий регулируется понятными аннотациями, не требующими статичности методов.
  • Неперехваченные исключения автоматически обрабатываются TestNG без преждевременного завершения теста. Об этих исключениях сообщается в отчете как о неудачных шагах.

Преимущества TestNG перед JUnit

У TestNG есть три основных преимущества перед JUnit:

  • Аннотации легче понять
  • Контрольные примеры можно легко сгруппировать
  • Возможно параллельное тестирование

Аннотации в TestNG - это строки кода, которые могут управлять тем, как будет выполняться метод под ними . Им всегда предшествует символ @. Очень ранний и быстрый пример TestNG показан ниже.

Аннотации будут обсуждаться позже в разделе «Аннотации, используемые в TestNG», так что вполне нормально, если вы еще не понимаете приведенный выше пример TestNG. Просто сейчас важно отметить, что аннотации в TestNG легче кодировать и понимать, чем в JUnit.

Возможность параллельного запуска тестов доступна в TestNG, но не в JUnit, поэтому структура TestNG более предпочтительна для тестировщиков, использующих Selenium Grid.

Создание тестового примера с использованием аннотаций TestNG

Теперь мы узнаем, как создать наш первый тестовый пример, используя аннотации TestNG в Selenium:

Прежде чем мы создадим тестовый пример, мы должны сначала настроить новый проект 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, давайте создадим новый файл TestNG.

Шаг 1. Щелкните правой кнопкой мыши папку пакета «src» и выберите «Создать»> «Другое».

Шаг 2: Щелкните папку TestNG и выберите опцию «TestNG class». Нажмите кнопку "Далее.

Шаг 3: Введите значения, указанные ниже, в соответствующие поля ввода и нажмите «Готово». Обратите внимание, что мы назвали наш файл Java «FirstTestNGFile».

Eclipse должен автоматически создать шаблон для нашего файла TestNG, показанного ниже.

Кодирование нашего первого примера тестового примера TestNG

Давайте теперь создадим наш первый тестовый пример, который проверит правильность домашней страницы Mercury Tours. Введите свой код, как показано в приведенном ниже примере TestNG:

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {общедоступная строка baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";общедоступный драйвер WebDriver;@Тестpublic void verifyHomepageTitle () {System.out.println («запуск браузера Firefox»);System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = новый FirefoxDriver ();driver.get (baseUrl);String expectedTitle = "Добро пожаловать: Mercury Tours";Строка actualTitle = driver.getTitle ();Assert.assertEquals (фактический заголовок, ожидаемый заголовок);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 с наименьшим значением приоритета до наибольшего. Нет необходимости, чтобы ваши значения приоритета были последовательными.

Отчет TestNG HTML подтвердит, что методы были выполнены на основе возрастающего значения приоритета.

Несколько параметров

Помимо «приоритета», @Test имеет еще один параметр, называемый «alwaysRun», который может иметь только значение «true» или «false». Чтобы использовать два или более параметра в одной аннотации, разделите их запятой , как показано ниже.

@Test (приоритет = 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 {общедоступная строка baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";общедоступный драйвер WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println («запуск браузера Firefox»);System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = новый FirefoxDriver ();driver.get (baseUrl);}@Тестpublic void verifyHomepageTitle () {String expectedTitle = "Добро пожаловать: Mercury Tours";Строка actualTitle = driver.getTitle ();Assert.assertEquals (фактический заголовок, ожидаемый заголовок);}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Применяя логику, представленную в таблице и приведенном выше коде, мы можем предсказать, что последовательность, в которой будут выполняться методы, будет следующей:

  • 1- й - launchBrowser ()
  • 2- й - verifyHomepageTitle ()
  • 3- е - terminateBrowser ()

Размещение блоков аннотаций можно менять местами, не влияя на хронологический порядок, в котором они будут выполняться . Давайте разберемся с примером TestNG и попробуем переставить блоки аннотаций так, чтобы ваш код выглядел так, как показано ниже.

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;public class firsttestngfile {общедоступная строка baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";общедоступный драйвер WebDriver;@AfterTest // Беспорядочноpublic void terminateBrowser () {driver.close ();}@BeforeTest // Беспорядочноpublic void launchBrowser () {System.out.println («запуск браузера Firefox»);System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = новый FirefoxDriver ();driver.get (baseUrl);}@Test // Беспорядочноpublic void verifyHomepageTitle () {String expectedTitle = "Добро пожаловать: Mercury Tours";Строка actualTitle = driver.getTitle ();Assert.assertEquals (фактический заголовок, ожидаемый заголовок);}}

Запустите приведенный выше код и обратите внимание, что

@BeforeMethod и @AfterMethod

@BeforeMethod

методы под этой аннотацией будут выполняться перед каждым методом в каждом тестовом примере .

@AfterMethod

методы под этой аннотацией будут выполняться после каждого метода в каждом тестовом примере.

Предположим, в Mercury Tours мы хотим проверить заголовки целевых страниц двух приведенных ниже ссылок.

Последовательность нашего теста будет такой:

  • Перейдите на домашнюю страницу и проверьте ее заголовок.
  • Щелкните ЗАРЕГИСТРИРОВАТЬСЯ и проверьте заголовок целевой страницы.
  • Вернитесь на домашнюю страницу и проверьте, правильно ли у нее заголовок.
  • Щелкните ПОДДЕРЖКА и проверьте заголовок целевой страницы.
  • Вернитесь на домашнюю страницу и проверьте, правильно ли у нее заголовок.

В приведенном ниже коде показано, как @BeforeMethod и @AfterMethod используются для эффективного выполнения сценария, упомянутого выше.

package firsttestngpackage;import org.openqa.selenium. *;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations. *;@Тестpublic class firsttestngfile {общедоступная строка baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";общедоступный драйвер WebDriver;ожидаемая публичная строка = null;общедоступная строка актуальна = null;@BeforeTestpublic void launchBrowser () {System.out.println («запуск браузера Firefox»);System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = новый FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String expectedTitle = "Добро пожаловать: Mercury Tours";Строка actualTitle = driver.getTitle ();Assert.assertEquals (фактический заголовок, ожидаемый заголовок);}@Test (приоритет = 0)public void register () {driver.findElement (By.linkText ("РЕГИСТРАЦИЯ")). click ();ожидаемый = "Зарегистрироваться: Mercury Tours";актуально = driver.getTitle ();Assert.assertEquals (фактическое, ожидаемое);}@Test (приоритет = 1)public void support () {driver.findElement (By.linkText ("ПОДДЕРЖКА")). click ();ожидаемый = "В разработке: Mercury Tours";актуально = driver.getTitle ();Assert.assertEquals (фактическое, ожидаемое);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Home")). click ();}@AfterTestpublic 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 TestNG.
  • TestNG Dataprovider - это способ передачи параметров в тестовую функцию, которая передает разные значения в тестовых примерах за одно выполнение.