30 вопросов по TestNG на QA интервью

30 вопросов по TestNG на QA интервью

Самые популярные вопросы интервью по TestNG:

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

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

Ищите работу Junior QA? Тогда вам в наш телеграм канал QA Вакансии. 
Каждую неделю 7 лучших вакансий с телеграм контактом HR компании. 
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

TestNG – это тестовый фреймворк, предназначенный для упрощения широкого спектра задач тестирования, от модульного до интеграционного.

2. В чем преимущества TestNG?

  1. Обеспечивает параллельное выполнение тестовых методов.
  2. Позволяет определить зависимость одного метода тестирования от другого.
  3. Позволяет назначать приоритет методам тестирования.
  4. Позволяет объединять методы тестирования в тестовые группы.
  5. Поддерживает параметризацию тест-кейсов с использованием аннотации @Parameters.
  6. Позволяет проводить тестирование на основе данных с использованием аннотации @DataProvider.
  7. Имеет различные утверждения, которые помогают проверить ожидаемые и фактические результаты.
  8. Составляет подробные (HTML) отчеты.

3. Какие аннотации доступны в TestNG?

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

Практический пример

4. Расположите приведенные ниже теги testng.xml от родительского к дочернему.

<test>
<suite>
<class>
<methods>
<classes>

Правильный порядок тегов следующий:

<suite>
<test>
<classes>
<class>
<methods>

5. Как создать и запустить файл testng.xml?

Во фреймворке TestNG необходимо создать файл testng.xml для создания и обработки нескольких тестовых классов. В xml-файле мы настраиваем наш тестовый запуск, устанавливаем тестовую зависимость, включаем или исключаем любой тест, метод, класс или пакет, а также устанавливаем приоритет и т. д.

6. Для чего нужен файл testng.xml?

В проекте Selenium TestNG мы используем файл testng.xml для настройки полного набора тестов в одном файле. Ниже перечислены некоторые из его особенностей:

  • Файл testng.xml позволяет включать или исключать выполнение тестовых методов и тестовых групп.
  • Позволяет передавать параметры в тестовые случаи.
  • Позволяет добавлять групповые зависимости.
  • Позволяет добавлять приоритеты тестам.
  • Позволяет настроить параллельное выполнение тест-кейсов.
  • Позволяет параметризовать тестовые случаи.

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

Мы можем определить параметры в файле testng.xml, после чего ссылаться на них в исходных файлах.

Создайте тестовый класс java, например ParameterizedTest.java, и добавьте в него тестовый метод parameterizedTest(). Этот метод принимает в качестве входного параметра строку. Добавьте к этому методу аннотацию @Parameters(“browser”).

// TestNG Interview Questions
public class ParameterizedTest {
	@Test
	@Parameters("browser")
	public void parameterizedTest(String browser){
		if(browser.equals("firefox")){
			System.out.println("Open Firefox Driver");
		}else if(browser.equals("chrome")){
			System.out.println("Open Chrome Driver");
		}
	}	
}

Параметру будет передано значение из файла testng.xml, что мы увидим в следующем шаге.

Можно задать параметр, используя следующий синтаксис в файле testng.xml.

<parameter name="browser" value="firefox"/>

Здесь атрибут name представляет имя параметра, а value – значение этого параметра.

Практический пример

8. Что такое TestNG Assert и каковы распространенные утверждения TestNG?

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

Некоторые из распространенных утверждений, поддерживаемых TestNG:

  • assertEqual(String actual,String expected)
  • assertEqual(String actual, String expected, String message)
  • assertEquals(boolean actual,boolean expected)
  • assertTrue(condition)
  • assertTrue(condition, message)
  • assertFalse(condition)
  • assertFalse(условие, сообщение)

9. Что такое Hard Assert?

Hard Assert немедленно выдает AssertException, когда оператор assert терпит неудачу, и набор тестов продолжается со следующей аннотацией @Test.

Практический пример

10. Что такое тест исключений?

TestNG дает возможность отслеживать обработку исключений кода. Вы можете проверить, вызывает ли код ожидаемое исключение или нет. Ожидаемое исключение для проверки во время выполнения тестового примера упоминается с использованием значения атрибута expectExceptions вместе с аннотацией @Test.

Практический пример

11. Как установить приоритет тестового случая?

Мы используем атрибут priority для аннотаций @Test. Если приоритет не установлен, тестовые сценарии выполняются в алфавитном порядке.

// TestNG Interview Questions
package TestNG;
import org.testng.annotations.*;
public class PriorityTestCase{
	@Test(priority=0)
	public void testCase1() {  
		system.out.println("Test Case 1");
	}
	@Test(priority=1)
	public void testCase2() { 	 
		system.out.println("Test Case 2");
	}
}

Вывод:

Test Case 1
Test Case 2

12. Что такое параметризованное тестирование?

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

Существует два способа задать эти параметры:

13. Как мы можем создать фреймворк, управляемый данными, используя TestNG?

Используя аннотацию @DataProvider, мы можем создать Data Driven Framework.

// TestNG Interview Questions
@DataProvider(name="getData")
	public Object[][] getData(){
		//Object [][] data = new Object [rowCount][colCount];
		Object [][] data = new Object [2][2];
		
		data [0][0] = "FirstUid";
		data [0][1] = "FirstPWD";
		
		data[1][0] = "SecondUid";
		data[1][1] = "SecondPWD";
		
		return data;
		
	}

Практический пример

14. Как запустить группу тестовых случаев с помощью TestNG?

TestNG позволяет выполнять сложные группировки тестовых методов. Вы можете не только объявить, что методы принадлежат группам, но также можете указать группы, которые содержат другие группы. Затем можно вызвать TestNG и попросить его включить определенный набор групп (или регулярных выражений), исключив при этом другой набор. Это дает максимальную гибкость при разбиении тестов на группы и не требует перекомпиляции, если необходимо запустить два разных набора тестов подряд.

Группы задаются в файле testng.xml и могут находиться либо в теге <test>, либо в теге <suite>. Группы, указанные в теге <suite>, применяются ко всем нижерасположенным тегам <test>.

@Test (groups = { "smokeTest", "functionalTest" })
public void loginTest(){
System.out.println("Logged in successfully");
}

Практический пример

15. Как создать группу групп в TestNG?

Группы также могут включать в себя другие группы. Они называются метагруппами. Например, вы можете определить группу all, включающую smokeTest и functionalTest. Изменим наш файл testng.xml следующим образом:

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

Практический пример

16. Как запускать тест-кейсы параллельно с помощью TestNG?

Для параллельного выполнения тестов в TestNG мы можем использовать атрибут “parallel” в testng.xml.

Атрибут parallel тега suite может принимать четыре значения:

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

<suite name="softwaretestingmaterial" parallel="methods">

Практический пример

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

Это осуществляется путем добавления тега exclude в testng.xml

<classes>
  <class name="TestCaseName">
     <methods>
       <exclude name="TestMethodNameToExclude"/>
     </methods>
  </class>      
</classes>

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

Это осуществляется путем добавления тега exclude в testng.xml

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

Практический пример

19. Как отключить тестовый пример в TestNG?

Для отключения тестового примера мы устанавливаем атрибут enabled в значении false в аннотации @Test.

@Test(enabled = false)

20. Как пропустить выполнение метода @Test в TestNG?

Это можно сделать с помощью функции throw new SkipException().

После вызова SkipException() оставшаяся часть этого тестового метода не будет выполнятся, а управление перейдет непосредственно к выполнению следующего тестового метода.

throw new SkipException("Skipping - This is not ready for testing ");

Практический пример

21. Как TestNG позволяет устанавливать зависимости?

TestNG позволяет объявлять зависимости двумя способами.
С использованием атрибутов dependsOnMethods в аннотациях @Test – практический пример
С использованием атрибутов dependsOnGroups в аннотациях @Test – практический пример

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

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

Слушатели реализуют интерфейс org.testng.ITestListener и в режиме реального времени получают уведомления о начале теста, его прохождении, неудаче и т.д..

Репортеры реализуют интерфейс org.testng.IReporter и получают уведомления о том, что все тестовые наборы были запущены TestNG. Экземпляр IReporter получает список объектов, описывающих весь прогон теста.

23. Для чего нужна аннотация @Listener в TestNG?

Класс Слушатели в TestNG используют для настройки отчетов и протоколирования. Одним из наиболее широко используемых Слушателей в TestNG является интерфейс ITestListener. Он имеет такие методы, как onTestStart, onTestSuccess, onTestFailure, onTestSkipped и т.д. Мы должны реализовать этот интерфейс, создав собственный класс Слушателя. Далее следует добавить аннотацию @Listeners в этот созданный класс.

Практический пример

24. Как написать регулярное выражение в файле testng.xml для поиска методов @Test, содержащих ключевое слово “smoke”.

Регулярное выражение для поиска методов @Test, содержащих ключевое слово “smoke”, приведено ниже.

<methods>
     <include name=".*smoke.*"/>
</methods>

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

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

26. Перечислите различные способы вызова TestNG?

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

27. Как запустить TestNG с помощью командной строки?

Для запуска TestNG откройте командную строку и используйте приведенный ниже код.

C:\Users\Admin\Desktop\STMSeleniumTutorial\workspace\SoftwareTestingMaterial

set classpath=C:\Users\Admin\Desktop\STMSeleniumTutorial\workspace\SoftwareTestingMaterial\bin;C:\Users\Admin\Desktop\STMSeleniumTutorial\workspace\SoftwareTestingMaterial\lib\*

java org.testng.TestNG C:\Users\Admin\Desktop\STMSeleniumTutorial\workspace\SoftwareTestingMaterial\testng.xml

28. Для чего используется атрибут @Test(invocationCount=x)?

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

@Test(invocationCount = 10)
public void testCase1(){

В данном примере метод testCase1 будет вызван десять раз.

29. Для чего используется атрибут @Test(threadPoolSize=x)?

Атрибут threadPoolSize указывает на необходимость формирования пула потоков для выполнения тестового метода через несколько потоков.

Примечание: Этот атрибут игнорируется, если не указан invocationCount

@Test(threadPoolSize = 3, <code>invocationCount = </code><code>10</code>) public void testCase1(){

В данном примере метод testCase1 будет вызываться из трех разных потоков.

30. Что означает тайм-аут теста в TestNG?

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

@Test(threadPoolSize = 3, invocationCount = 10,&nbsp; timeOut = 10000)
public void testCase1(){

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

Перевод статьи «30 Most Popular TestNG Interview Questions And Answers».

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

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