1. Что такое TestNG?
TestNG расшифровывается как Testing Next Generation. Это фреймворк для автоматизации тестирования, используемый для языка программирования Java. Его разработал Cedric Beust, а вдохновением для него послужил фреймворк JUnit.
2. Какие главные особенности TestNG?
Ниже представлены главные особенности использования TestNG:
- Использует больше объектно-ориентированных (ООП) и Java-функций
- Поддерживает различные аннотации
- Предоставляет различные типы утверждений, которые помогают проверить фактические и ожидаемые результаты
- Обеспечивает функции приоритизации и группировки
- Позволяет проводить тестирование на основе данных
- Автоматически генерирует HTML-отчет о тестировании
3. Какие основные шаги необходимы для написания теста в TestNG?
Для написания тест-кейса необходимо выполнить три основных шага:
- Написать бизнес-логику теста и аннотировать ее с помощью аннотаций.
- Создать файл testing.xml и добавить в него информацию о тесте.
- Запустить 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».