Selenium WebDriver: TestNG для управления тестовыми случаями и генерации отчетов



Это руководство по Selenium WebDriver поможет вам понять необходимость использования TestNG с Selenium для управления тестовыми примерами и создания подробных отчетов о тестировании.

В предыдущем блоге я научил вас, как запустить ваш первый тест Selenium WebDriver. В этом блоге я расскажу о продвинутых концепциях Selenium WebDriver. Я уже довольно много раз упоминал, что Selenium WebDriver имеет ограничения в отношении управления тестовыми примерами и создания отчетов о тестировании. Итак, какая альтернатива? Такой популярный инструмент, как Selenium, обязательно должен иметь обходной путь, верно? Конечно, есть! Мы можем использовать комбинацию Selenium и TestNG, чтобы обойти это ограничение, и это будет темой обсуждения в этом блоге.

передавать файлы в экземпляр ec2 windows

Если вы новичок в Selenium и хотите познакомиться с основными концепциями, вы можете начать свое путешествие отсюда: ? Однако другие могут начать работу с TestNG для Selenium из этого блога.Также следует знать, что организации активно ищут профессионалов с , что делает его важным навыком для тестировщиков программного обеспечения.





Разработчики программного обеспечения со всего мира единодушно согласятся, что написание кода в тестовых примерах экономит значительную часть их времени на отладку. Зачем? Это потому, что тестовые примеры помогают создавать надежный и безошибочный код. Как оно это делает? Разбив весь код на более мелкие тестовые примеры, а затем оценив каждый из этих тестовых примеров на соответствие условиям годен / не годен, мы можем создать безошибочный код. Поскольку Selenium не поддерживает выполнение кода в тестовых примерах, мы должны использовать TestNG для того же. Вот где TestNG вписывается в структуру Selenium.

TestNG означает Тестирование нового поколения и это среда автоматизации тестирования с открытым исходным кодом, вдохновленная JUnit и NUnit. Что ж, не просто вдохновением, а обновлением этих двух фреймворков. Вы можете спросить, какое здесь обновление?Обновление с TestNG заключается в том, что он предоставляет дополнительные функции, такие как: тестовые аннотации, группировка, приоритезация, параметризация и методы упорядочения в коде, что было невозможно ранее.



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

testng - селен webdriver

Итак, как TestNG выполняет свою работу? На этот вопрос ответят вследующий раздел этого учебного блога по Selenium WebDriver, где я расскажу, как управлять различными тестовыми примерами с помощью TestNG.



Selenium WebDriver с TestNG

Тестовые наборы можно определить и управлять одним из следующих способов:

  1. Аннотации к испытаниям
  2. Приоритезация
  3. Отключение тестовых случаев
  4. Зависимость метода
  5. Группировка
  6. Утверждения
  7. Генерация отчетов

Позвольте мне начать объяснятькаждая из этих функций.

Аннотации к испытаниям

Прежде всего, давайте зададимся вопросом: зачем нам использовать аннотации? Когда мы можем их использовать? Аннотации в Selenium используются для управления следующим выполняемым методом. Аннотации тестов определяются перед каждым методом в тестовом коде. Если какой-либо метод не имеет префикса с аннотациями, этот метод будет проигнорирован и не будет выполняться как часть тестового кода. Чтобы определить их, методы должны быть просто помечены знаком ' @Тестовое задание ‘. Взгляните, например, на приведенный ниже фрагмент кода.

пакет testng import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.annotations.AfterClass import org.testng.annotations.AfterMethod import org.testng.annotations.BeforengClass import org. .BeforeMethod import org.testng.annotations.Test public class TestAnnotations {@Test public void myTestMethod () {System.out.println ('Inside method: - myTestMethod') WebDriver driver = new FirefoxDriver () driver.get ('http: //www.seleniumframework.com/Practiceform/ ') String title = driver.getTitle () System.out.println (title) driver.quit ()} @BeforeMethod public void beforeMethod () {System.out.println (' Это фрагмент кода выполняется перед методом: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod public void afterMethod () {System.out.println (' This piece кода выполняется после метода: - myTestMethod ')} @BeforeClass public void beforeClass () {Syste m.out.println ('Этот фрагмент кода выполняется перед выполнением класса')} @AfterClass public void afterClass () {System.out.println ('Этот фрагмент кода выполняется после выполнения класса')} }

В приведенном выше коде вы могли заметить, что я не определил «основной» метод. Однако у меня есть еще 5 определенных методов. Это «myTestMethod», «beforeMethod», «afterMethod», «beforeClass» и «afterClass». Также обратите внимание на порядок определения методов в коде, потому что они не будут выполняться в том же порядке.

Метод «myTestMethod» помечен @Тестовое задание , и это основной метод или фрагмент кода, который необходимо выполнить. Другие аннотированные методы будут выполняться до и после выполнения этого метода. Поскольку 'beforeMethod' аннотируется @BeforeMethod , он будет выполнен перед выполнением myTestMethod. Точно так же afterMethod аннотируется @AfterMethod , и поэтому он будет выполнен после myTestMethod.

Однако 'beforeClass' аннотируется @BeforeClass , что означает, что он будет выполнен еще до выполнения самого класса. Имя нашего класса здесь TestAnnotations , и, таким образом, перед тем, как класс начнет выполняться, фрагмент кода внутри «beforeClass» будет выполнен. Точно так же «afterClass» аннотируется @AfterMethod , и, таким образом, будет выполняться после класса TestAnnotations выполняется.

Если вы все еще не уверены в порядке выполнения, то приведенный ниже фрагмент обязательно вам поможет.

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. BeforeMethod 5. Test 6. AfterMethod 7. AfterClass 8. AfterTest 9. AfterSuite

Результатом приведенного выше кода будет:

Этот фрагмент кода выполняется до выполнения класса. Этот фрагмент кода выполняется до метода: - myTestMethod Inside method: - myTestMethod 1493192682118 geckodriver INFO Прослушивание 127.0.0.1:13676 1493192682713 mozprofile :: profile INFO Использование пути профиля C: UsersVardzAppofile_mo .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO Запуск браузера C: Program Files (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO Подключение к Marionette на локальном хосте: 59792 [GPU 6152] ПРЕДУПРЕЖДЕНИЕ: ошибка канала / сборка: файл c /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, строка 346 1493192688316 Marionette INFO Прослушивание порта 59792 26 апреля 2017 г. 13:14:49 org. openqa.selenium.remote.ProtocolHandshake createSession ИНФОРМАЦИЯ: обнаруженный диалект: ошибка JavaScript W3C: http://t.dtscout.com/i/?l=http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j=, line 1: TypeError: document.getElementsByTagNa меня (...) [0] не определено Selenium Framework | Практическая форма 1493192695134 Marionette INFO Новые соединения больше не будут приниматься 26 апреля 2017 г. 13:14:57 org.openqa.selenium.os.UnixProcess destroy SEVERE: Невозможно убить процесс с помощью PID 6724 Этот фрагмент кода выполняется после метода: - myTestMethod Этот фрагмент кода выполняется после выполнения класса PASSED: myTestMethod ===================================== ============ Тест по умолчанию Запуск тестов: 1, отказов: 0, пропусков: 0 ======================== ======================= =========================== ==================== Набор по умолчанию Всего выполненных тестов: 1, сбоев: 0, пропусков: 0 =============== ================================

Как видно из приведенных выше выходных данных, количество выполненных тестов равно 1, а количество неудачных - 0. Это означает, что код выполнен успешно. Даже порядок выполнения методов будет в порядкеяупомянутый ранее.

Когда вы выполняете этот код на своем компьютере, Selenium WebDriver создаст экземпляр вашего браузера Firefox, перейдет к форме практики Selenium Framework, закроет экземпляр браузера и отобразит тот же результат, что и выше, в вашей Eclipse IDE.

Я использовал в своем коде только 5 разных аннотаций. Но есть еще много аннотаций, которые можно использовать для управления следующим выполняемым методом. Полный список аннотаций объяснен вТаблицаниже:

@BeforeSuite - Метод, помеченный @BeforeSuite будет запущен до того, как будут выполнены все тесты в комплекте.

@AfterSuite - Метод, помеченный @AfterSuite будет запущен после того, как будут выполнены все тесты в комплекте.

@BeforeTest - Метод, помеченный @BeforeTest будет выполняться до запуска любого тестового метода, принадлежащего классу.

@AfterTest - Метод, помеченный @AfterTest будет выполняться после того, как будут выполнены все тестовые методы, принадлежащие классу.

@BeforeGroup - Метод, помеченный @BeforeGroup будет выполняться перед запуском каждой группы.

@AfterGroup - Метод, помеченный @AfterGroup будет запускаться после запуска каждой группы.

@BeforeClass - Метод, помеченный @BeforeClass будет выполняться один раз перед вызовом первого тестового метода в текущем классе.

@После школы - Метод, помеченный @После школы будет запущен один раз после запуска всех тестовых методов в текущем классе.

@BeforeMethod - Метод, помеченный @BeforeMethod будет выполняться до запуска любого тестового метода внутри класса.

@AfterMethod - Метод, помеченный @AfterMethod будет запускаться после запуска каждого тестового метода внутри класса.

@Тестовое задание - Метод, помеченный @Тестовое задание является основным методом тестирования во всей программе. Другие аннотированные методы будут выполняться вокруг этого метода.

Скриншот отчета TestNGпредставлены ниже: -

что такое облако службы продаж

Приоритезация

Мы говорили о том, как можно определить различные методы, чтобы они выполнялись вокруг @Тестовое задание метод. Но что, если у вас более одного @Тестовое задание метод и вы хотите определить порядок выполнения между ними?

В этом случае мы можемприоритизируйте их, присвоив номера аннотированным тестовым примерам. Чем меньше число, тем выше приоритет. Приоритет может быть назначен в качестве параметров при определении тестовых примеров. Но если приоритет не назначен, аннотированные методы тестирования будут выполняться в соответствии с алфавитным порядком тестов. Посмотрите на параметры тестовых аннотаций в приведенном ниже фрагментекод.

@Test (Priority = 2) public static void FirstTest () {system.out.println ('Это тестовый пример номер два из-за приоритета 2')} @Test (Priority = 1) public static void SecondTest () { system.out.println ('Это тестовый пример номер один из-за приоритета №1')} @Test public static void FinalTest () {system.out.println ('Это последний тестовый пример, потому что нет приоритета' )}

Отключение тестовых случаев

Позвольте мне показать вам кое-что более интересное. Что, если у вас есть код, охватывающий миллион строк, состоящий из сотен тестовых случаев, и вы хотите отключить только один тестовый метод? Вам не нужно удалять какую-либо часть кода, вместо этого, мы можем просто отключить этот метод тестирования.

Акт отключения тестового примера также выполняется с помощью параметров. Мы можем установить включен атрибут 'false'. По умолчанию все тестовые примеры будут включены, поэтому нам не нужно определять их каждый раз, когда мы пишем тест. Посмотрите на параметры третьего и четвертого методов в приведенном ниже фрагментекод.

@Test (Priority = 2, enabled = True) public static void FirstTest () {system.out.println ('Это тестовый случай номер два из-за приоритета 2')} @Test (Priority = 1, enabled = True ) public static void SecondTest () {system.out.println ('Это тестовый пример номер один из-за приоритета № 1')} @Test (enabled = false) public static void SkippedTest () {system.out.println ( 'Это пропущенный тестовый случай, потому что он отключен')} @Test (enabled = True) public static void FinalTest () {system.out.println ('Это последний тестовый пример, который включен и не имеет приоритета ')}

Зависимость метода

Теперь, если у вас есть ситуация, когда вы хотите, чтобы фрагмент кода выполнялся только в том случае, если он удовлетворяет условию или только если определенный метод выполняется успешно, тогда мы можем сделать это, используя зависит от метода (). В основном это условие зависимости метода, при котором метод будет выполняться в зависимости от другого метода. Если дополнительно установить alwaysRun значение true, то метод будет выполняться независимо от состояния отказа / успешного прохождения зависимого метода. Посмотрите на код в приведенном ниже фрагменте кода.

@Test public static void FirstTest () {system.out.println ('Это первый тестовый пример, который будет выполнен')} @Test (dependsOnMethods = {'FirstTest'}) public static void SecondTest () {system.out. println ('Это второй тестовый пример, который должен быть выполнен. Это зависимый метод')} @Test (dependsOnMethods = {'SecondTest'}) public static void FinalTest () {system.out.println ('Это последний тест Дело Все равно исполнится. ')}

Теперь это подводит нас к другому важному аспекту тестирования.аннотации, которые Группировка .

Группировка

К настоящему времени вы должны знать, что в коде будет несколько методов как часть нашего тестового примера. Допустим, есть 100 тестовых примеров, но мы хотим выполнить только 20 тестовых примеров в нашем следующем тесте. Как вы думаете, мы можем это сделать? Мы можем точно.

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

@Test (groups = {'MyGroup'}) public static void FirstTest () {system.out.println ('Это часть группы: MyGroup')} @Test (groups = {'MyGroup'}) public static void SecondTest () {system.out.println ('Это также часть группы: MyGroup')} @Test public static void ThirdTest () {system.out.println ('Но это не часть Группа: MyGroup ')}

Утверждения TestNG

Теперь мы переходим к следующей теме TestNG - утверждениям. Как следует из названия, утверждения могут использоваться в методах тестирования для определения условий прохождения / неуспешности теста. На основе истинного / ложного условия утверждения тесты пройдут / не пройдут.

В приведенный ниже код я включил 3 метода тестирования, в которых первый и третий методы имеют условие прохождения, а второй метод - условие отказа. Посмотрите код сами.

package testng import org.testng.annotations.Test import org.testng.annotations.BeforeMethod import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.Assert import org.testng.annotations.After утверждения открытого класса {@BeforeMethod public void beforeMethod () {System.setProperty ('webdriver.gecko.driver', 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} public boolean isEqual (int a, int b) {if (a == b ) {return true} else {return false}} @Test public void testEquality1 () {Assert.assertEquals (true, isEqual (10, 10)) System.out.println ('Это пройденное условие')} @Test public void testEquality2 () {Assert.assertEquals (true, isEqual (10, 11)) System.out.println ('Это условие отказа')} @Test public void getTitle () {Драйвер WebDriver = новый драйвер FirefoxDriver (). get ('https://www.gmail.com') String title = driver.getTitle () Assert.assertEquals (title, 'Gmail') System.out.println ('Это снова условие прохождения')} }

Когда вы посмотрите на отчет, который создается после этого выполнения, вы заметите, что из трех тестов один не прошел, а два прошли. Еще один важный момент, на который следует обратить внимание, это то, что когда утверждение не выполняется, другие команды / строки кода в этом тесте будут пропущены. Только когда утверждение будет успешным, следующая строка кода будет выполнена в этом тесте. Посмотрите результат ниже, где system.out.println выполнил только первый и третий методы.

1493277977348 geckodriver INFO Прослушивание 127.0.0.1:47035 1493277977993 mozprofile :: profile INFO Использование пути к профилю C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 Geckodriver Programme 1493277977994 geckodriver :: marionett.exe Запуск файла 1493277977994 Geckodriver Подключение к Marionette на локальном хосте: 50758 [GPU 6920] ПРЕДУПРЕЖДЕНИЕ: ошибка канала: 109: файл c: / builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc, строка 346 1493277981742 Marionette INFO Прослушивание порта 50758 27 апреля 2017 г. 12:56:22 org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Обнаруженный диалект: W3C Это снова условие прохода Это условие прохода ПРОЙДЕНО: getTitle ПРОЙДЕН: testEquality1 FAILED: testEquality2 java.lang.AssertionError: ожидается [false], но найдено [true] в org.testng.Assert.fail (Assert.java:93) в org.testng.Assert.failNotEquals (Assert.java: 512) в org.testng.Assert.assertE qualsImpl (Assert.java:134) в org.testng.Assert.assertEquals (Assert.java:115) в org.testng.Assert.assertEquals (Assert.java:304) в org.testng.Assert.assertEquals (Assert.java : 314) в testng.Assertions.testEquality2 (Assertions.java:38) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAll Источник) в java.lang.reflect.Method.invoke (Неизвестный источник) в org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) в org.testng.internal.Invoker.invokeMethojava (:66er.invokeMethojava) по адресу org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) по адресу org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) по адресу org.testng.internal.TestMethodWorker.invoke12: TestMethodWorker.invods.TestMethodWorker.invoke: ) на org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) на org.testng.TestRunner.privateRun (TestRunner.java:744) на org.testng.TestRu nner.run (TestRunner.java:602) в org.testng.SuiteRunner.runTest (SuiteRunner.java:380) в org.testng.SuiteRunner.runSequential (SuiteRunner.java:375) в org.testng.SuiteRunner.privatenerRun (SuiteRunner.privatenerRun .java: 340) в org.testng.SuiteRunner.run (SuiteRunner.java:289) в org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) в org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java). в org.testng.TestNG.runSuitesSequential (TestNG.java:1301) в org.testng.TestNG.runSuitesLocally (TestNG.java:1226) в org.testng.TestNG.runSuites (TestNG.java:1144) в org.testng. TestNG.run (TestNG.java:1115) в org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) в org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) в org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) ======================================= ======== Тест по умолчанию Выполнено тестов: 3, отказов: 1, пропусков: 0 ============================ =================== =============================== ================ Набор по умолчанию Всего выполненных тестов: 3, сбоев: 1, пропусков: 0 =================================== ============

Итак, это конец концепций, связанных с управлением тестовыми случаями. Остается еще одна тема - создание отчетов. Генерация отчетов - последняя тема в этом руководстве по Selenium WebDriver, потому что отчеты могут быть созданы только после всехвыполнены тесты.

аспирант и магистр то же самое

Генерация отчетов

Самое главное, что вам нужно отметить, это то, что отчет будет создан только через файл .xml. Это означает, что будь то метод, класс или группа, которую вы хотите протестировать, все они должны быть указаны в файле .xml.

Итак, сначала вы можете создать новую папку в своем проекте и создать новый файл внутри этой папки, дать имя файлу и сохранить его с расширением .xml. Вы можете создать новую папку и файл, щелкнув правой кнопкой мыши проводник пакетов. После создания файла перейдите на вкладку источника в нижней части окна и введите конфигурации, указанные в приведенном ниже фрагменте.

 

Первая строка - это определение типа XML-документа. Это стандартно и обязательно для всех отчетов об испытаниях. Но другие строки довольно понятны. Я использовал открытые теги для набора, теста, классов и класса. Тег Classes может иметь внутри один или несколько классов. Таким образом, его можно использовать, если мы хотим создать отчет, в котором мы тестируем несколько классов. Это особенно удобно для разработчиков, которые хотят протестировать длинный фрагмент кода.

В любом случае, возвращаясь к нашему отчету, вы можете назвать каждый набор, тест или класс после открытия этих тегов и не забывать закрывать каждый открытый тег. Я дал название своей сюите TestNG , название теста как Тестовое задание Аннотации и имя класса как testng.TestAnnotations. Обратите внимание, что имя класса имеет формат ' packagename.classname ’ .

Когда вы запустите этот файл как набор TestNG, запускается выполнение, и вы получите подробные отчеты о тестах. Вы получите результат теста на вкладке консоли, а результат набора тестов - на следующей вкладке. Отчет, который я создал для выполнения своего кода, этовприведенный ниже снимок экрана. Вы заметите, что на этот раз есть имя набора, имя теста, имя класса, а также время, затраченное на выполнение каждого из них.

Если вы хотите просмотреть отчет в формате HTML (отчет по индексам или отчет по электронной почте), вы можете перейти к тестовый выход папка внутри каталога проекта в вашем рабочем пространстве. Нажимая на них, вы можете просматривать отчеты даже позже. Ниже их скриншоты.

Индексный отчет : -

Отправляемый по электронной почте отчет : -

Итак, мы подошли к концу этого учебного блога по Selenium WebDriver. Пришло время настроить eclipse с вашей стороны, установить различные пакеты Selenium, установить TestNG и приступить к написанию тестовых примеров.

Вы можете посмотреть приведенное ниже обучающее видео по Selenium WebDriver, чтобы стать свидетелем демонстрации различных концепций, описанных в этом блоге.

Selenium Training | TestNG Framework для Selenium | Эдурека

В этом обучающем видео по Edureka Selenium вы подробно ознакомитесь с Selenium WebDriver. Это обучающее видео по Selenium идеально подходит как для новичков, так и для профессионалов, которые хотят освежить основы команд WebDriver и узнать, как TestNG можно использовать с Selenium для управления различными тестовыми примерами.

Если вы хотите изучить Selenium и построить карьеру в области тестирования, ознакомьтесь с нашими интерактивными онлайн-версиями. Здесь вы получите круглосуточную поддержку, которая поможет вам на протяжении всего периода обучения.

Есть вопрос к нам? Пожалуйста, укажите это в комментариях, и мы свяжемся с вами.