Вопросы по TestNG

Лучшие вопросы и ответы на собеседовании по TestNG

1. Что такое TestNG?

TestNG расшифровывается как Testing Next Generation. Это фреймворк для автоматизации тестирования, используемый для языка программирования Java. Его разработал Cedric Beust, а вдохновением для него послужил фреймворк JUnit.

2. Какие главные особенности TestNG?

Ниже представлены главные особенности использования TestNG:

  • Использует больше объектно-ориентированных (ООП) и Java-функций
  • Поддерживает различные аннотации
  • Предоставляет различные типы утверждений, которые помогают проверить фактические и ожидаемые результаты
  • Обеспечивает функции приоритизации и группировки
  • Позволяет проводить тестирование на основе данных
  • Автоматически генерирует HTML-отчет о тестировании

3. Какие основные шаги необходимы для написания теста в TestNG?

Для написания тест-кейса необходимо выполнить три основных шага:

  1. Написать бизнес-логику теста и аннотировать ее с помощью аннотаций.
  2. Создать файл testing.xml и добавить в него информацию о тесте.
  3. Запустить TestNG.

4. Как запустить тестовый сценарий (test script)?

Чтобы запустить тестовый сценарий в TestNG, нужно щелкнуть правой кнопкой мыши на классе, содержащем тестовые методы, выбрать опцию “Run As”, а затем выбрать “TestNG test”.

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

5. Что такое аннотации?

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

6. Какие аннотации используются?

В TestNG используются следующие аннотации:

  • Аннотации предусловий. Выполняются перед выполнением тестовых методов. К аннотациям предусловий относятся @BeforeSuite, @BeforeClass, @BeforeTest и @BeforeMethod.
  • Аннотация теста. Указывается перед определением тестового метода и обозначается как @Test.
  • Аннотации постусловий. Выполняются после выполнения всех тестовых методов. К аннотациям постусловий относятся @AfterSuite, @AfterClass, @AfterTest и @AfterMethod.

7. Какова последовательность выполнения всех аннотаций в TestNG?

Аннотации в TestNG выполняются в следующей последовательности:

  • @BeforeSuite
  • @BeforeTest
  • @BeforeClass
  • @BeforeMethod
  • @Test
  • @AfterMethod
  • @AfterClass
  • @AfterTest
  • @AfterSuite

8. В чем разница между наборами (Suite), тестами (Test) и классами (Class)?

  • Suite состоит из одного или нескольких тестов.
  • Test состоит из одного или нескольких классов.
  • Class состоит из одного или нескольких методов.

9. Что такое тестовый метод (test method)?

Метод, аннотированный @Test, называется тестовым методом и служит для проведения юнит-тестирования. В методе @Test мы пишем логику приложения, которую хотим автоматизировать.

10. Как установить приоритеты?

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

@Test(priority=1), @Test(priority=2)

11. Как в TestNG можно отключить тест?

Чтобы отключить ненужный тест, можно использовать аннотацию @Test(enabled = false).

12. Что такое группы?

Группа – это атрибут, который позволяет выполнять несколько тест-кейсов одновременно. Например, если у нас есть 100 тест-кейсов для it_department и 10 тест-кейсов для hr_department, и мы хотим запустить все тесты для it_department вместе в одном наборе, это можно сделать с помощью группировки.

13. Как определить группировку в TestNG?

Мы можем определить группировку в TestNG с помощью атрибута “groups”: @Test(groups=”title”).

14. Что такое зависимость?

Есть методы, от которых зависят другие методы. Допустим, мы хотим протестировать какое-либо приложение, но страница входа в приложение не работает. В таком случае мы не сможем протестировать остальные сценарии.

Таким образом, LoginTest() является методом, от которого зависят другие тесты. Только если LoginTest() пройден, будут выполнены остальные методы.

15. Как написать тест с зависимостями?

Существует два способа написания тестов с зависимостями. Зависимость может быть как от методов, так и от групп. Если метод зависит от другого метода, укажите его имя для обозначения зависимости: @Test(dependsOnMethods=”LoginTest”).

Если метод зависит от какой-либо группы, укажите ее название: @Test(dependsOnGroups=”functional”).

16. Как объединить тестовые методы для нескольких групп?

Чтобы сгруппировать тестовые методы, принадлежащие к нескольким группам, нужно указать имена групп в виде массива в атрибуте groups аннотации @Test.

@Test(groups = { "GroupName1", "GroupName2", "GroupName3" .... })

17. Как исключить группу из цикла выполнения тестов?

Исключение группы в TestNG означает, что эта группа не будет не будет выполняться программой и будет игнорироваться. Название группы для исключения указывается в XML-файле с использованием следующего синтаксиса:

<groups>  <run>
   <exclude name="groupname"> </exclude>
</run>  </groups> 

18. Что такое “timeOut” в TestNG?

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

Например: @Test(timeOut = 700). Здесь тестовому методу отведено 700 миллисекунд на завершение выполнения, иначе тест будет помечен как неудавшийся.

19. Что такое “thread-count”?

thread-count – это атрибут, который используется для указания максимального количества потоков для каждого набора тестов, если включен параллельный режим (в противном случае этот атрибут игнорируется).

Например, thread-count="2" означает, что два метода будут выполняться параллельно в разных потоках.

20. Что такое файл testng.xml?

Файл testing.xml – это конфигурационный XML-файл для TestNG. В нем мы можем создавать тестовые наборы и группы тестов, помечать тесты для параллельного выполнения, задавать порядок выполнения тестов, добавлять слушателей (listeners) и передавать параметры в тест-кейсы.

21. Какое значение имеет файл testng.xml?

С помощью файла testng.xml можно:

  • Определить порядок выполнения всех тест-кейсов
  • Указать, какие именно тест-кейсы нужно выполнять
  • Группировать тест-кейсы и выполнять их в соответствии с требованиями
  • Запускать несколько тест-кейсов одновременно

22. Что такое параметризация в TestNG?

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

23. Сколько существует способов для передачи значений параметров в тестовые методы?

Мы можем напрямую передавать значения параметров в тестовые методы двумя способами: через файл testng.xml и через поставщик данных (DataProvider).

25. Как завершить тест с ошибкой, если он не выполняется в течение заданного времени?

Мы можем использовать атрибут timeOut аннотации @Test. Значение, присвоенное этому атрибуту, будет выступать в качестве верхней границы времени выполнения. Если тест не будет выполнен в течение этого времени, то он завершится с ошибкой из-за превышения времени ожидания.

25. Назовите различные методы выполнения тестов в TestNG

  • Использование XML-файлов. Тестовые наборы и тесты можно определить в файле XML. Этот метод обеспечивает наибольшую гибкость в отношении последовательности выполнения тестов, группировки и параметризации.
  • Использование аннотаций. Можно аннотировать методы с помощью @Test, чтобы указать, что это тестовые методы. Тогда их можно будет запускать прямо из IDE.

26. В чем разница между тестовым методом и методом конфигурации?

Тестовый метод содержит фактическую логику теста, а метод конфигурации используется для настройки или очистки тестовой среды. К методам конфигурации относятся @BeforeSuite, @BeforeClass и т. д.

27. Что такое группа групп в TestNG?

Группы также могут включать в себя другие группы. Такие группы называются мета-группами (MetaGroups). Например, можно определить группу all, включающую smokeTest и functionalTest:

<groups>
      <define name="all">
         <include name="smokeTest"/>
        <include name="functionalTest"/>
      </define>
      <run>
        <include name="all" />
      </run> 
    </groups>

28. Как передать параметр в тест-кейс через файл testng.xml?

Для передачи параметров в тест-кейс через XML-файл можно использовать тег parameter внутри тега test.

Сначала нужно указать имя и значение параметра в теге parameter. Эти параметры можно получить в тестовом методе, используя аннотацию @Parameters:

@Test
@Parameters({"username", "password"})
public void myTestMethod(String username, String password) {
//code
}

После этого можно использовать XML-файл, чтобы передать значения параметрам username и password:

// TestNG XML file
  <test name="MyTest">
    <parameter name="username" value="myname" />
    <parameter name="password" value="123" />
    <classes>
      <class name="MyTestClass" />
    </classes>
  </test>
</suite> 

29. Что такое аннотация @Factory в TestNG?

Аннотация @Factory используется для создания экземпляров тестов во время выполнения. Она позволяет динамически генерировать тестовые классы на основе заданных условий или параметров.

С помощью аннотации @Factory можно создать несколько экземпляров одного и того же тестового класса с различными наборами данных или параметрами.

30. В чем разница между аннотациями @Factory и @Dataprovider?

Аннотация @Factory используется для создания нескольких экземпляров одного и того же тестового класса, каждый из которых имеет свой набор входных параметров или конфигураций. Это полезно при выполнении одного и того же теста с разными наборами данных или конфигурациями, а также при параллельном выполнении тестов для экономии времени при тестировании.

@Factory
public Object[] factoryMethod() {
return new Object[] {   
new SimpleTest("one"),
new SimpleTest("two")	
};
}

Тем временем, аннотация @DataProvider предоставляет данные для тестового метода. Она позволяет отделить данные теста от логики теста, что упрощает сопровождение и повторное использование кода.

@DataProvider
public Object[][] dataMethod() {
return new Object[][] { { "one" }, { "two" } };
}

31. Что такое Assertion в TestNG?

Assertion — это утверждение, которое помогает определить, соответствуют ли ожидаемые результаты фактическим. Чтобы определить, прошел тест или нет, мы используем встроенный класс Assert и его методы.

32. Приведите примеры распространенных утверждений (assertions) в TestNG

  • assertEquals(expectedValue, actualValue, message) сравнивает два значения и определяет, равны ли они.
  • assertTrue(condition, message) помогает определить, истинно ли указанное условие.
  • assertFalse(condition, message) определяет, является ли указанное условие ложным.

33. Как используется аннотация @Listener?

В TestNG аннотация @Listener используется для определения “слушателей”. Слушатели – это классы, которые отслеживают события, происходящие во время выполнения теста. С помощью слушателей можно настроить или расширить поведение TestNG путем добавления дополнительных функций, таких как логирование, отчетность или управление потоком выполнения теста.

34. Какие типы отчетов генерируются в TestNG по умолчанию?

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

  • HTML-отчеты
  • XML-отчеты
  • Индексные отчеты (index reports)
  • Отчеты для отправки по электронной почте

35. Где генерируется и сохраняется отчет для отправки по электронной почте?

Отчет, доступный для отправки по электронной почте, по умолчанию создается в директории с результатами проекта TestNG, в папке с названием “test-output”. Файл отчета для отправки по электронной почте называется “emailable-report.html”.

36. Где генерируется и сохраняется индексный отчет (index report)?

Отчет index.html является одним из стандартных отчетов TestNG. Он предоставляет обзор результатов тестирования и содержит ссылки на другие отчеты, такие как отчет для отправки по электронной почте, testng-results.xml и testng-failed.xml.

Отчет index.html по умолчанию создается в директории с результатами проекта TestNG в папке “test-output”. Файл отчета называется “index.html”.

37. Как использовать класс Reporter в TestNG для генерации логов?

Класс Reporter в TestNG является встроенным классом для логирования сообщений во время выполнения тестов. Его нужно импортировать, а затем передать методу строку сообщения в качестве аргумента: Reporter.log("Log message");.

38. Что означает параллельное выполнение тестов в TestNG?

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

39. Как запустить параллельное выполнение тестов, классов и методов в Selenium с использованием XML-файла TestNG?

Мы можем запускать наши тестовые методы, классы или тесты параллельно, используя атрибут parallel в файле testng.xml для тестового набора (test suite). Этот атрибут может принимать одно из следующих значений: tests, classes или methods.

<suite name = "Parallel Test Suite" parallel = "methods"> 

40. Как выполнять тест-кейсы параллельно с помощью TestNG?

Для настройки параллельного выполнения тестов в TestNG можно использовать атрибуты parallel и thread-count в файле testng.xml. 

Атрибут parallel в теге <suite> может принимать следующие значения:

  • tests. Все тесты внутри тега <test> в файле testng.xml будут выполняться параллельно.
  • classes. Все тесты внутри одного Java-класса будут выполняться параллельно.
  • methods. Все методы с аннотацией @Test будут выполняться параллельно.
  • instances. Тесты в одном экземпляре класса будут выполняться параллельно, но методы в разных экземплярах будут выполняться в отдельных потоках.

Атрибут thread-count определяет количество потоков, которые будут запускаться одновременно.

<suite name="TestingTestSuite" parallel="methods" thread-count="5"> 

41. Что такое тест с “Time-Out”?

“Time-Out” в TestNG – это время, отведенное на выполнение модульного тестирования. Если юнит-тест не завершится в пределах установленного времени, TestNG прекратит дальнейшее выполнение тестов и пометит этот тест как неудачный.

42. Как создать файл для тестирования в  TestNG?

Чтобы создать файл для тестирования, нужно создать Java-класс и добавить в него необходимые аннотации и методы. Вот пример:

import org.testng.annotations.Test; 
public class MyTest { 
@Test 
public void testMethod() { 
// Test code here 
 } }

В этом примере класс MyTest содержит тестовый метод с аннотацией @Test. Вы можете запустить этот тест с помощью TestNG, создав XML-файл, в котором будут указаны тестовые классы для выполнения.

43. Как установить временное ограничение для тестов?

Чтобы установить ограничение по времени для теста в TestNG, можно использовать атрибут timeOut аннотации @Test и указать время в миллисекундах. Например:

@Test(timeOut = 1000) 
public void timedTestMethod() { 
// code
}

44. Что такое Verbose?

Verbose – это атрибут в TestNG, который используется в теге <suite> файла конфигурации testng.xml. Он может принимать значения от 1 до 10. Чем больше значение, тем более детализированным будет журнал результатов тестов в окне консоли в Eclipse IDE.

45. Как исключить группы в TestNG?

Имя группы, которую вы хотите исключить, задается в XML-файле с помощью следующего синтаксиса:

<groups>
  <run>
    <exclude name = "groupname"/>
   </run>
</groups>

46. Какие единицы используются для указания времени в тестовых наборах и в тест-кейсах?

В тестовых наборах и в тест-кейсах время указывается в миллисекундах.

47. Какие существуют способы создания отчетов о результатах тестирования в TestNG?

TestNG предлагает два способа создания отчетов:

  • Слушатели (Listeners) реализуют интерфейс org.testng.ITestListener и получают уведомления в реальном времени о начале, успешном завершении, неудаче теста и других событиях.
  • Репортеры (Reporters) реализуют интерфейс org.testng.IReporter и получают уведомления после выполнения всех наборов тестов. Экземпляр IReporter получает список объектов, описывающих весь процесс выполнения тестов.

Перевод статьи «Top TestNG Interview Questions & Answers».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *