Кращі 50 TestNG Питання та відповіді на інтерв'ю (2026)

Toп TestNG Запитання та відповіді на інтерв’ю

Готуючись до а TestNG співбесіда? Настав час подумати про питання, які продемонструють ваші сильні сторони. Солідний TestNG Основи співбесіди виявляють глибину, впевненість та готовність, які цінують команди з найму.

Можливості в цій галузі охоплюють зростання автоматизації, розвиток фреймворків та практичне тестування програм, що вимагають технічного та професійного досвіду. Робота в цій галузі вимагає знань у предметній області, навичок аналізу та гнучкого набору навичок, який допомагає новачкам, фахівцям середньої та старшої ланки розбиратися в поширених питаннях та відповідях на них у сфері технічних, базових та просунутих знань.
Детальніше ...

👉 Безкоштовне завантаження PDF: TestNG Запитання та відповіді на співбесіді

Toп TestNG Запитання та відповіді на інтерв’ю

1) Що є TestNG і чому його використовують в автоматизованому тестуванні?

TestNG (Test Next Generation) – це фреймворк для тестування, натхненний JUnit та NUnit, але з розширеними можливостями, такими як grouping, послідовність, параметризація та управління залежностями. Він в основному використовується в автоматизованому тестуванні для оптимізації виконання тестів, покращення організації тестів та створення детальних звітів HTML та XML.

Основні переваги TestNG включати:

  • Підтримали паралельне виконання тестів, що зменшує загальний час виконання.
  • Забезпечує анотації які ефективно контролюють потік тестування.
  • Пропозиції тестування на основі даних через @DataProvider анотація
  • Породжує настроювані звіти для кращого налагодження.

Наприклад, TestNG дозволяє виконувати групи тестів на дим, регресію та інтеграцію незалежно без зміни тестового коду, забезпечуючи гнучкість та масштабованість у великих комплексах автоматизації.


2) Поясніть TestNG життєвий цикл з анотаціями та порядком їх виконання.

Команда TestNG Життєвий цикл визначає, як тести ініціалізуються, виконуються та завершуються. Він контролюється за допомогою анотацій, які забезпечують структуру та зрозумілість потоку тестування.

Анотація Опис Наказ про виконання
@BeforeSuite Виконується перед усіма тестами в наборі 1
@BeforeTest Виконується раніше <test> тег у XML 2
@BeforeClass Виконується перед першим методом у поточному класі 3
@BeforeMethod Виконується перед кожним тестовим методом 4
@Test Містить фактичну логіку тестування 5
@AfterMethod Виконується після кожного методу тестування 6
@AfterClass Виконується після всіх методів у класі 7
@AfterTest Біжить за <test> тег у XML 8
@AfterSuite Виконується після всіх тестів у пакеті 9

Такий структурований порядок забезпечує передбачувану настройку та демонтаж тестів, що є критично важливим для підтримки незалежності тестування.


3) Як справи TestNG відрізняється від JUnit?

Хоча обидва фреймворки використовуються для модульного тестування, TestNG забезпечує надійнішу конфігурацію та можливості паралельного виконання.

особливість JUnit TestNG
Паралельне виконання Обмежена підтримка Повна підтримка
Анотації Менше (@Before, @After) Багатший (@BeforeSuite, @DataProvider)
Управління залежностями Недоступний Доступно за допомогою dependsOnMethods
Гроуping Не підтримується Підтримується за допомогою groups
Параметризація Через зовнішні бігуни Вбудовано через XML або @DataProvider

Підсумовуючи, TestNG є кращим для автоматизоване тестування на рівні підприємства та інтеграцію з такими інструментами, як Selenium, тоді як JUnit ідеально підходить для простих модульних тестів.


4) Які є TestNG анотації та чим вони корисні?

Анотації в TestNG визначати структура та поведінка методів тестуванняВони усувають необхідність складного налаштування XML, забезпечуючи декларативний контроль тестування безпосередньо в коді.

До часто використовуваних анотацій належать:

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

приклад:

@BeforeMethod
public void setup() {
    System.out.println("Initializing browser...");
}

@Test
public void verifyLogin() {
    System.out.println("Executing login test...");
}

Це допомагає розробникам логічно організувати виконання тестів, гарантуючи, що налаштування, виконання тесту та демонтаж відбуваються у визначеному порядку.


5) Поясніть поняття групиping in TestNG.

Гроуping in TestNG дозволяє логічну категоризацію тестів на менші, керовані набори, такі як «Дим», «Регресія» або «Здоров'я».

приклад:

@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }

Ви можете налаштувати свій XML-пакет для запуску певних груп:

<groups>
  <run>
    <include name="Smoke"/>
  </run>
</groups>

Переваги:

  • Сприяє вибірковому виконанню тестових випадків.
  • Підвищує гнучкість конвеєрів CI/CD.
  • Зменшує час виконання під час інкрементальних збірок.

6) Як можна досягти параметризації в TestNG?

Параметризація дозволяє проводити тестування на основі даних, дозволяючи запускати тести з кількома вхідними наборами даних. TestNG підтримує два основні методи:

  1. використання @Parameters анотація з XML:
  2. <parameter name="browser" value="chrome"/>
    @Test
    @Parameters("browser")
    public void launchBrowser(String browser) { ... }
    
  3. використання @DataProvider:
  4. @DataProvider(name="loginData")
    public Object[][] getData() {
      return new Object[][] {{"user1","pass1"}, {"user2","pass2"}};
    }
    
    @Test(dataProvider="loginData")
    public void loginTest(String user, String pass) { ... }
    

Така гнучкість спрощує підтримку та виконання великих наборів тестів у різних середовищах або конфігураціях.


7) Що таке залежності в TestNG і як ними керують?

Залежності в TestNG контролювати порядок виконання тестів на основі результатів інших тестів за допомогою dependsOnMethods or dependsOnGroups атрибути.

приклад:

@Test
public void loginTest() { ... }

@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }

Якщо залежний метод завершується невдачею, наступний тест автоматично пропускається.

Цей механізм запобігає виконанню недійсних тестів і допомагає підтримувати логічна цілісність тестуЦе особливо корисно для багатоетапних функціональних потоків, таких як вхід → виконання дії → перевірка результату.


8) Які є різні способи виконання TestNG тести?

TestNG Тести можна виконувати кількома гнучкими способами залежно від налаштувань тестування:

  1. З IDE (Eclipse/ІнтелліДжей): Клацніть правою кнопкою миші на класі або XML fileRun asTestNG Test.
  2. З командного рядка: java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml
  3. Використання інструментів складання:
    • Maven: Конфігурувати surefire-plugin in pom.xml.
    • Gradle: Скористайтеся кнопкою testng залежність та конфігурація завдання.
  4. Через конвеєри CI/CD: Інтеграція з Jenkins або дії GitHub для автоматичного виконання.

Така різноманітність забезпечує сумісність між середовищами розробки, тестування та виробництва.


9) Які є TestNG слухачі та чому вони важливі?

Слухачі в TestNG надавати перехоплювачі для налаштування поведінки тестів шляхом моніторингу подій виконання тестів, таких як запуск, успіх, невдача або пропуск.

Звичайні слухачі:

  • ITestListener: Tracподії на рівні методу тестування ks.
  • ISuiteListenerСпостерігає за подіями на рівні люкса.
  • IReporter: Генерує власні звіти.

приклад:

public class CustomListener implements ITestListener {
  public void onTestFailure(ITestResult result) {
    System.out.println("Test Failed: " + result.getName());
  }
}

Слухачі часто використовуються для сприйняття скріншоти при невдачі, що генерує користувацькі журналиабо інтеграція з інструментами звітності як-от Allure або ExtentReports.


10) Які переваги та недоліки використання TestNG?

Аспект Переваги Недоліки
Гнучкість Підтримує групуping, залежність та паралельне виконання Складне налаштування XML для великих пакетів
Звітність Надає детальні звіти HTML та XML Обмежене налаштування без прослуховувачів
інтеграцією Бездоганно працює з Selenium та інструменти CI/CD Трохи вища крива навчання
Параметризація Вбудована підтримка тестування на основі даних Потрібне обслуговування для великих наборів даних

У цілому, TestNG це надійний та гнучкий фреймворк, що підходить для сучасних середовищ автоматизованого тестування, незважаючи на незначні накладні витрати на налаштування.


11) Як можна визначити пріоритети тестових випадків у TestNG?

TestNG забезпечує priority атрибут у @Test анотація для визначення порядку, в якому мають виконуватися методи тестування. Тести з нижчими значеннями пріоритету виконуються першими.

приклад:

@Test(priority = 1)
public void loginTest() { ... }

@Test(priority = 2)
public void dashboardTest() { ... }

Якщо пріоритет не вказано, значення за замовчуванням таке 0, а методи виконуються в алфавітному порядку.

Найкраща практика: Використовуйте значення пріоритетів економно. Надмірне їх використання може зробити порядок тестування жорстким. Для складних потоків керування залежностями (dependsOnMethods) є більш підтримуваним, ніж сувора пріоритизація.


12) Поясніть концепцію та використання паралельного виконання в TestNG.

Паралельне виконання в TestNG дозволяє одночасно виконувати кілька тестів, класів або методів, що значно скорочує загальний час виконання.

Ви можете ввімкнути цю функцію в testng.xml Файл:

<suite name="ParallelSuite" parallel="tests" thread-count="3">
  <test name="Test1">...</test>
  <test name="Test2">...</test>
</suite>

Підтримувані паралельні режими:

  • tests
  • classes
  • methods
  • instances

переваги:

  • Швидший цикл зворотного зв'язку.
  • Ефективне використання багатоядерних процесорів.
  • Масштабованість для великих комплексів автоматизації.

Однак, переконайтеся безпека ниток під час використання спільних ресурсів, таких як WebDriver або підключення до бази даних.


13) Що таке постачальники даних у TestNGЧим вони відрізняються від параметрів?

@DataProvider дозволяє тестування на основі даних шляхом надання методів тестування кількома наборами даних.

приклад:

@DataProvider(name="credentials")
public Object[][] data() {
    return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}

@Test(dataProvider="credentials")
public void login(String username, String password) { ... }

Різниця між @Parameters та @DataProvider:

особливість @Parameters @DataProvider
Джерело даних XML-файл Java метод
Тип даних Один набір даних Кілька наборів даних
Гнучкість Less Високий
Використовуйте Case Змінні середовища Повторні тести на основі даних

Отже, @DataProvider є кращим під час виконання одного тесту з кількома наборами даних, наприклад, для перевірки входу з кількома обліковими даними.


14) Як можна вимкнути або пропустити тест у TestNG?

Ви можете вимкнути тест у TestNG використання enabled атрибут або програмно пропуститиping його.

1 Використовуючи enabled = false:

@Test(enabled = false)
public void skipTest() {
    System.out.println("This test will not run.");
}

2. Пропуститиping під час виконання за допомогою SkipException:

@Test
public void conditionalSkip() {
    throw new SkipException("Skipping this test due to condition.");
}

Вимкнення корисне для тимчасова деактивація нестабільні або неповні тести без їх видалення. Пропуститиping є цінним для умови виконання, як-от пропуститиping тести для непідтримуваних браузерів.


15) Яка роль файлу testng.xml та які його основні компоненти?

Команда testng.xml файл є основою конфігурації TestNGВін визначає набори тестів, групи тестів, параметри та налаштування паралельного виконання.

Приклад структури:

<suite name="AutomationSuite">
  <parameter name="browser" value="chrome"/>
  <test name="RegressionTests">
    <classes>
      <class name="com.test.LoginTest"/>
      <class name="com.test.PaymentTest"/>
    </classes>
  </test>
</suite>

Основні компоненти:

  • <suite> – Визначає весь набір.
  • <test> – Представляє тестовий блок.
  • <classes> – Перелічує тестові класи.
  • <methods> – Фільтрує певні методи випробувань.
  • <parameter> – Надає глобальні параметри або параметри тестового рівня.

XML-файл надає централізований контроль перевиконання без зміни коду.


16) Як можна створювати звіти в TestNG?

TestNG автоматично генерує два типи звітів:

  1. HTML-звіт (test-output/index.html) – Підсумовує складені, нескладані та пропущені тести.
  2. XML-звіт – Використовується для інтеграції з інструментами CI/CD.

Для розширеної звітності, TestNG інтегрується з:

  • ExtentReports – Пропонує графічні панелі інструментів та детальні журнали.
  • Звіти Allure – Надає візуальну аналітику з кроками тестування, скріншотами та журналами.

Приклад інтеграції:

ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();

Ці звіти є важливими для tracтенденції королівства та виявлення слабких місць у тестовому покритті.


17) Що таке фабрики? TestNG, і як вони працюють?

Фабрики в TestNG використовуються для створення динамічні екземпляри тестових класівВони дозволяють параметризоване створення екземплярів класів перед запуском тестів.

приклад:

public class FactoryExample {
  private String browser;

  public FactoryExample(String browser) {
    this.browser = browser;
  }

  @Factory
  public static Object[] factoryMethod() {
    return new Object[] { new FactoryExample("Chrome"), new FactoryExample("Firefox") };
  }

  @Test
  public void testBrowser() {
    System.out.println("Running test on: " + browser);
  }
}

переваги:

  • дозволяє створення параметризованих об'єктів.
  • Ідеально підходить для крос-браузерне тестування та виконання в кількох середовищах.
    Фабрики доповнюють постачальників даних (DataProvider), коли вам потрібні різні конфігурації об'єктів, а не лише варіації даних на рівні методів.

18) Як можна використовувати твердження в TestNG?

Твердження використовуються для перевірки порівняння очікуваних та фактичних результатів у методах тестування.

Типи тверджень:

  1. Жорсткі твердження (клас Assert):
    Зупиняє виконання тесту негайно після невдачі.
  2. Assert.assertEquals(actual, expected);
    Assert.assertTrue(condition);
    
  3. М'які твердження (клас SoftAssert):
    Продовжує виконання навіть після невдачі, повідомляючи про всі проблеми в кінці.
  4. SoftAssert soft = new SoftAssert();
        soft.assertEquals(actual, expected);
        soft.assertAll();
    
  5. Коли користуватися:
    • Використовуйте складні твердження для критична перевірка як успішний вхід.
    • Використовуйте м’які твердження для кілька перевірок в межах одного методу випробування.

19) Поясніть різницю між @BeforeMethod та @BeforeClass у TestNG.

Аспект @BeforeMethod @BeforeClass
Виконання Runs перед кожним метод випробування Runs один раз до цього будь-який метод у класі
Сфера За методом випробування За клас тестування
Загальне використання Ініціалізація браузера перед кожним тестом Одноразове завантаження конфігурації або налаштувань браузера

приклад:

@BeforeClass
public void setupClass() {
    System.out.println("Executed once per class");
}

@BeforeMethod
public void setupMethod() {
    System.out.println("Executed before each method");
}

Скористайтеся кнопкою @BeforeMethod коли для кожного тесту потрібне чисте середовище, та @BeforeClass для складних завдань ініціалізації, які можна використовувати повторно.


20) Як це робить TestNG підтримка впровадження залежностей та які варіанти її використання?

TestNG опори ін'єкційна залежність через вбудоване впровадження контексту та об'єктів конфігурації, таких як ITestContext, XmlTestабо Method.

приклад:

@Test
public void testContextExample(ITestContext context) {
    System.out.println("Suite Name: " + context.getSuite().getName());
}

Використовуйте випадки:

  • Динамічне отримання параметрів тесту.
  • Доступ до інформації про конфігурацію, такої як назви пакетів або параметри паралельного виконання.
  • Підвищення гнучкості тестування без жорстко встановлених залежностей.

Впровадження залежностей дозволяє розробникам писати модульні, контекстно-залежні тести що динамічно адаптуються до змін навколишнього середовища.


21) Яка різниця між @Factory та @DataProvider у TestNG?

обидві @Factory та @DataProvider допомагають з параметризацією, але вони працюють на різних рівнів в архітектурі тестування.

особливість @Factory @DataProvider
Сфера Рівень класу Рівень методу
Мета Створює кілька екземплярів класу з різними даними Надає дані для одного методу тестування
Виконання Виконує весь клас для кожного екземпляра Виконує один метод кілька разів
Ідеальний варіант використання Кросбраузерне або середовище тестування Функціональне тестування на основі даних

приклад:

  • Фабрика: Запускає весь клас для кожного типу браузера.
  • Постачальник даних: Запускає один метод тестування з кількома наборами даних.

Скористайтеся кнопкою @Factory коли змінюється сама ідентифікація об'єкта, та @DataProvider для варіації функціонального входу в межах одного екземпляра об'єкта.


22) Як можна автоматично повторювати невдалі тестові випадки в TestNG?

TestNG забезпечує механізм для повторно запустити невдалі тестові випадки використання IRetryAnalyzer Інтерфейс

Приклад реалізації:

public class RetryAnalyzer implements IRetryAnalyzer {
  int count = 0;
  int maxTry = 2;

  public boolean retry(ITestResult result) {
    if (count < maxTry) {
      count++;
      return true;
    }
    return false;
  }
}

Використання:

@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
   Assert.fail("Intentional Failure");
}

Переваги:

  • Зменшує лущення в конвеєрах CI.
  • Вирішує тимчасові проблеми з мережею або середовищем.

Найкраща практика: Поєднуйте логіку повторних спроб із належним веденням журналу та створенням знімків екрана для налагодження періодичних збоїв.


23) Яке використання ITestContext у TestNG?

ITestContext забезпечує контекстна інформація про тестовий запуск, включаючи назву пакету, назву тесту, вихідний каталог та параметри.

приклад:

@Test
public void contextExample(ITestContext context) {
    System.out.println("Suite: " + context.getSuite().getName());
}

Основні методи:

  • getSuite() – Отримує інформацію на рівні пакету.
  • getName() – Повертає назву тесту.
  • setAttribute() / getAttribute() – Обмін даними між тестами.

Це дозволяє обмін даними між методами тестування або класами та спрощує динамічну звітність та ведення журналу.


24) Як можна створити залежність між тестовими групами в TestNG?

Ви можете визначити міжгрупові залежності за допомогою dependsOnGroups атрибут у @Test анотація

приклад:

@Test(groups = "Login")
public void login() { ... }

@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }

Це гарантує, що verifyProfile група виконується лише тоді, коли всі тести в Login успішно пройдено групу.

Це особливо корисно в інтеграційне тестування, де модулі залежать від успішного виконання інших (наприклад, процес входу → профілю → виходу).


25) Як можна ігнорувати певні методи тестування в TestNG XML-файл?

Ви можете явно виключити методи у класі у файлі XML-набору за допомогою <exclude> теги.

приклад:

<class name="com.test.LoginTests">
  <methods>
    <exclude name="verifyLogout"/>
  </methods>
</class>

Це дозволяє тестерам тимчасово вимкнути певні методи не змінюючи Java вихідний код — корисний у великих пакетах, де потрібне динамічне включення або виключення на основі циклів випуску або пріоритетів спринту.


26) Як можна TestNG бути інтегрованим з Selenium WebDriver?

TestNG та Selenium утворюють потужну комбінацію для автоматизації інтерфейсу користувача.

Типова схема інтеграції включає організацію тестів за допомогою анотацій, керування налаштуванням/демонтажем та запуск тестів за допомогою інструментів XML або CI.

приклад:

@BeforeMethod
public void setup() {
    driver = new ChromeDriver();
}

@Test
public void verifyTitle() {
    driver.get("https://example.com");
    Assert.assertEquals(driver.getTitle(), "Example Domain");
}

@AfterMethod
public void teardown() {
    driver.quit();
}

Переваги інтеграції:

  • дозволяє паралельне тестування браузерів.
  • Спрощується тестова групаping та звітність.
  • Бездоганно працює з Конвеєри CI/CD як Jenkins або Дії GitHub.

27) Які найкращі практики використання TestNG у великих системах автоматизації?

Кращі практики:

  1. Скористайтеся кнопкою DescriptЖиве найменування: Називайте тести на основі поведінки, а не реалізації.
  2. Група кредитного плечаping: Створіть логічні групи тестів (Smoke, Regression).
  3. Уникайте жорсткого кодування: Використовуйте параметри або файли властивостей для тестових даних.
  4. Мінімізація залежностей: За можливості, тримайте тестові випадки незалежними.
  5. Централізувати конфігурацію: Скористайтеся кнопкою testng.xml для облаштування люкса.
  6. Інтеграція звітності: Використовуйте слухачі або сторонні інструменти, такі як ExtentReports.
  7. Використовуйте логіку повторної спроби обережно: Уникайте маскування справжніх дефектів.

Дотримання цих вимог гарантує масштабованість, зручність обслуговування та читабельність в автоматизації на рівні підприємства.


28) Яка різниця між @BeforeTest та @BeforeSuite у TestNG?

особливість @BeforeTest @BeforeSuite
Сфера Виконується перед кожним <test> тег у XML Запускається один раз перед усім набором
частота Кілька разів (якщо кілька <test> блоки) Тільки один раз на номер
Загальне використання Ініціалізація конфігурації тестового рівня Налаштування глобальних ресурсів

приклад:

@BeforeSuite
public void setupSuite() {
    System.out.println("Global setup for suite.");
}

@BeforeTest
public void setupTest() {
    System.out.println("Setup for each <test> tag.");
}

Скористайтеся кнопкою @BeforeSuite та цінності глобальні конфігурації (наприклад, підключення до бази даних) та @BeforeTest та цінності ініціалізації, специфічні для тесту.


29) Може TestNG використовувати для тестування API? Як?

Так. TestNG можна ефективно використовувати для Тестування API шляхом інтеграції з бібліотеками HTTP-клієнтів, такими як Будьте впевнені or HttpClient.

приклад:

@Test
public void verifyApiResponse() {
    Response response = RestAssured.get("https://api.example.com/users");
    Assert.assertEquals(response.getStatusCode(), 200);
}

переваги:

  • дозволяє перевірка на основі тверджень відповідей.
  • Підтримали параметризація та тестування на основі даних для кількох кінцевих точок.
  • Породжує структуровані звіти для перевірок REST API.

Поєднуючись TestNG і RestAssured, тестувальники можуть підтримувати єдину систему автоматизації як для тестування інтерфейсу користувача, так і для тестування API.


30) Як передавати параметри з командного рядка в TestNG?

Ви можете перевизначити параметри XML під час виконання, передаючи системні властивості за допомогою -D прапор

Приклад команди:

mvn test -Dbrowser=chrome -Denv=staging

Code приклад:

@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
    System.out.println("Running on: " + browser);
}

Це дозволяє динамічний вибір середовища у конвеєрах CI/CD без зміни файлів конфігурації, що підвищує гнучкість тестування.


31) Як можна контролювати порядок виконання тестів у TestNG без використання пріоритетів?

Замість використання priority, TestNG дозволяє контролювати через залежно та Упорядкування методів XML.

методи:

  1. використання dependsOnMethods:
  2. @Test
    public void login() { ... }
    
    @Test(dependsOnMethods = "login")
    public void verifyDashboard() { ... }
    
  3. Використання послідовності методів XML:
  4. <classes>
      <class name="com.test.LoginTests">
        <methods>
          <include name="login"/>
          <include name="verifyDashboard"/>
        </methods>
      </class>
    </classes>
    

Найкраща практика: Надавайте перевагу логічним залежностям для складних потоків замість статичних пріоритетів, забезпечуючи надійні та зручні в обслуговуванні набори тестів.


32) Як можна виконати певні методи тестування з командного рядка в TestNG?

TestNG дозволяє виконання тестів на рівні методу безпосередньо з командного рядка за допомогою XML або конфігурацій Maven Surefire.

Варіант 1: Використання XML-файлу

<class name="com.test.LoginTests">
  <methods>
    <include name="verifyLogin"/>
  </methods>
</class>

Варіант 2: Команда Maven

mvn test -Dtest=com.test.LoginTests#verifyLogin

Такий підхід дозволяє вибіркове виконання, корисний для налагодження окремих методів або перевірки критично важливих функцій під час швидкої збірки.


33) Як параметризувати тести за допомогою зовнішнього файлу Excel у TestNG?

Параметризація, керована Excel, є поширеною в фреймворках, керованих даними, де тестові дані часто змінюються.

Етапи впровадження:

  1. Скористайтеся кнопкою Apache POI or JExcel для читання даних Excel.
  2. Подайте його в @DataProvider метод.

приклад:

@DataProvider(name = "excelData")
public Object[][] readExcel() throws Exception {
    FileInputStream fis = new FileInputStream("data.xlsx");
    XSSFWorkbook wb = new XSSFWorkbook(fis);
    XSSFSheet sheet = wb.getSheetAt(0);
    Object[][] data = new Object[sheet.getLastRowNum()][2];
    for (int i = 0; i < sheet.getLastRowNum(); i++) {
        data[i][0] = sheet.getRow(i + 1).getCell(0).getStringCellValue();
        data[i][1] = sheet.getRow(i + 1).getCell(1).getStringCellValue();
    }
    return data;
}

Це дозволяє запускати один і той самий метод тестування з кількома реальними наборами даних з Excel, що збільшує гнучкість та охоплення.


34) Як ти можеш бігати TestNG випробування в Jenkins або конвеєри CI/CD?

TestNG бездоганно інтегрується з Jenkins, GitLab CIабо Дії GitHub через Maven або Gradle будує

Кроки в Jenkins:

  1. Встановлювати Плагін інтеграції Maven.
  2. Створити Робота у фрістайл або на трубопроводі.
  3. додавати mvn clean test як крок побудови.
  4. Після збірки, налаштування HTML-звітів:
    • Каталог звітів: test-output
    • Індексний файл: index.html

Переваги:

  • Дозволяє проводити автоматизоване регресійне тестування.
  • Забезпечує заплановані тестові запуску та тенденції tracкороль.
  • Забезпечує послідовне виконання тестів у різних середовищах.

35) Яке призначення @Parameters і чим він відрізняється від @Optional?

Обидві анотації стосуються параметризації, але служать різним цілям.

особливість @Parameters @Optional
Мета Передає параметри з XML-файлу Надає значення за замовчуванням, якщо параметр відсутній
Декларація Використовується з XML <parameter> Використовується всередині методу випробувань
Поведінка Видає помилку, якщо значення відсутнє Використовує резервне значення

приклад:

@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
    System.out.println("Running on: " + browser);
}

використання @Optional гарантує стабільність тесту коли конфігурації XML неповні.


36) Як ви обробляєте залежності тестів між різними класами в TestNG?

Щоб створити міжкласові залежності, TestNG дозволяє використовувати dependsOnGroups атрибут.

приклад:

@Test(groups = "Login")
public void loginTest() { ... }

@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }

Такий підхід допомагає керувати багатомодульні залежності де кожен клас представляє модуль (Вхід, Панель керування, Оплата тощо).

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


37) Що таке збої конфігурації в TestNG, і як з ними можна впоратися?

Збої конфігурації трапляються, коли методи налаштування або демонтажу анотовані як @Before* or @After* збій.

Вони можуть викликати залежні тести, які потрібно пропустити, навіть якщо ці тести правильні.

Поширені причини:

  • Неправильна ініціалізація WebDriver.
  • Проблеми з налаштуванням бази даних або середовища.
  • Неправильна конфігурація параметрів.

Розв'язки:

  • Скористайтеся кнопкою спробувати-зловити блоки в методах налаштування.
  • Застосовувати alwaysRun = true щоб забезпечити продовження очищення, незважаючи на збої.

приклад:

@BeforeMethod(alwaysRun = true)
public void setup() {
    // Setup logic
}

Це гарантує, що ваші методи демонтажу продовжуватимуть виконуватися, зберігаючи стабільність тестового середовища.


38) Яке використання атрибутів invocationCount та threadPoolSize у TestNG?

Ці атрибути дозволяють повторне та паралельне виконання тестів того ж методу.

приклад:

@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
    System.out.println("Running load test...");
}
атрибут Опис
invocationCount Кількість разів виконання методу
threadPoolSize Кількість одночасних потоків

Корпус: Тестування продуктивності, перевірка стабільності або відтворення нестабільної поведінки під час кількох запусків.


39) Як запускати лише невдалі тестові випадки в TestNG?

Після прогулянки номером, TestNG створює файл з назвою testng-failed.xml , test-output каталог.

Ви можете повторно запустити лише невдалі тести, виконавши:

java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml

переваги:

  • Економія часу завдяки пропускуping успішні випробування.
  • Спрощує налагодження у великих пакетах.
  • Зазвичай використовується в конвеєрах CI для швидкого повторного тестування.

Ви також можете інтегрувати це з Jenkins використання скрипта після збірки для повторних запуску.


40) Які є деякі обмеження TestNG і як їх можна пом'якшити?

Незважаючи на свою міцність, TestNG має кілька обмежень.

Обмеження Стратегія пом'якшення
Складність конфігурації XML Використовуйте конфігурацію та конструктори на основі анотацій
Обмежена нативна звітність Інтегруйте ExtentReports або Allure
Немає вбудованого контролю повторних спроб Здійснювати IRetryAnalyzer
Проблеми потокобезпеки під час паралельних запуску Використання локальних для потоку екземплярів WebDriver
Крива навчання для початківців Ведення структур проектів на основі шаблонів

Завдяки належному проектуванню фреймворку та найкращим практикам ці обмеження можна мінімізувати, забезпечуючи стабільні та зручні в обслуговуванні рішення для автоматизації.


41) Як ви використовуєте слухачі для логування та створення скріншотів у Selenium-TestNG?

Слухачі в TestNG допомагати контролювати виконання тестів і виконувати такі дії, як ведення журналу, створення знімків екрана або динамічне звітування про результати.

Приклад реалізації:

public class ScreenshotListener implements ITestListener {
  @Override
  public void onTestFailure(ITestResult result) {
      WebDriver driver = ((BaseTest) result.getInstance()).getDriver();
      File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
      FileUtils.copyFile(src, new File("screenshots/" + result.getName() + ".png"));
  }
}

Використання:

@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }

Переваги:

  • Автоматично фіксує несправності.
  • Покращує налагодження за допомогою візуальних доказів.
  • Зменшує ручні зусилля під час ведення журналів.

Цей метод є критично важливим у конвеєрах автоматизації CI/CD, особливо під час дистанційної діагностики невдалих збірок.


42) Яка різниця між IReporter та ITestListener у TestNG?

особливість IReporter ITestListener
Мета Генерує користувацькі звіти після виконання тесту Tracks та реагує на події тестування під час виконання
благання Після завершення всіх випробувань Протягом життєвого циклу тестування (початок, успіх, невдача)
Вихід Звіти HTML/XML/JSON Файли журналів, знімки екрана, панелі керування в реальному часі
Загальне використання ExtentReports, інтеграція Allure Ведення журналу, обробка помилок, механізми повторної спроби

приклад:

  • Скористайтеся кнопкою IReporter для будівництва комплексні звіти після завершення тестування.
  • Скористайтеся кнопкою ITestListener та цінності ведення журналу в режимі реального часу або скріншоти.

Вони також можуть бути комбінований створювати комплексні системи автоматизованої аналітики.


43) Як ви виконуєте кросбраузерне тестування за допомогою TestNG Конфігурація XML?

Кроссбраузерне тестування гарантує, що однакова функціональність працює в різних браузерах.

Приклад конфігурації:

<suite name="CrossBrowserSuite" parallel="tests">
  <test name="ChromeTest">
    <parameter name="browser" value="chrome"/>
    <classes><class name="com.test.LoginTest"/></classes>
  </test>
  <test name="FirefoxTest">
    <parameter name="browser" value="firefox"/>
    <classes><class name="com.test.LoginTest"/></classes>
  </test>
</suite>

Java Code:

@Parameters("browser")
@BeforeClass
public void setup(String browser) {
    if(browser.equalsIgnoreCase("chrome"))
        driver = new ChromeDriver();
    else if(browser.equalsIgnoreCase("firefox"))
        driver = new FirefoxDriver();
}

Такий підхід дозволяє паралельне виконання в кількох браузерах, що прискорює охоплення тестуванням на всіх платформах.


44) Як ви інтегруєтеся TestNG з Docker або Selenium Сітка?

TestNG бездоганно інтегрується з Докеризований Selenium сітка щоб забезпечити розподілене паралельне тестування.

Кроки:

  1. Створювати Selenium Сітка в Docker використовуючи офіційний Selenium зображення:
    docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
  2. Оновити TestNG Установка:
  3. DesiredCapabilities caps = new DesiredCapabilities();
    caps.setBrowserName("chrome");
    driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
    
  4. Виконайте свій пакет через Jenkins або конвеєр CI.

Переваги:

  • дозволяє масштабоване паралельне тестування.
  • Зменшує накладні витрати на налаштування середовища.
  • Забезпечує послідовне виконання тестів між розподіленими контейнерами.

45) Яка різниця між паралельним виконанням на рівнях набору, тестів та методів у TestNG?

рівень Паралельний атрибут Поведінка виконання
Suite parallel="suites" Виконує кілька пакетів одночасно
Перевірити parallel="tests" Runs <test> блоки одночасно
Клас parallel="classes" Паралельно запускає тестові класи
Метод parallel="methods" Виконує окремі методи тестування паралельно

приклад:

<suite name="ParallelTests" parallel="methods" thread-count="3">
  <test name="SampleTest">
    <classes><class name="com.test.ParallelExample"/></classes>
  </test>
</suite>

Найкраща практика:Скористайтеся кнопкою parallel="classes" для стабільності в Selenium тести, щоб уникнути конфліктів спільних драйверів.


46) Як можна обмінюватися даними між тестами без використання глобальних змінних у TestNG?

TestNG забезпечує ITestContext та ін'єкційна залежність динамічно обмінюватися даними.

приклад:

@Test
public void storeData(ITestContext context) {
    context.setAttribute("token", "abc123");
}

@Test(dependsOnMethods = "storeData")
public void useData(ITestContext context) {
    String token = (String) context.getAttribute("token");
    System.out.println("Using token: " + token);
}

Це дозволяє уникнути статичних змінних, підтримує безпеку потоків та гарантує ізоляція даних між тестами.


47) Як ви фіксуєте та реєструєте пропущені тести TestNG?

Ви можете зафіксувати пропущені тести за допомогою onTestSkipped() , ITestListener Інтерфейс

приклад:

@Override
public void onTestSkipped(ITestResult result) {
    System.out.println("Skipped Test: " + result.getName());
}

Причини пропускуping:

  • Залежний тестовий збій.
  • Умовний пропускping через SkipException.
  • Недоступність середовища.

Найкраща практика:
Причини пропуску журналу та стек traces для tracзручність у звітах CI або на інформаційних панелях.


48) Поясніть, як параметризувати тести REST API за допомогою TestNG і будьте впевнені.

TestNGАвтора @DataProvider елегантно інтегрується з Будьте впевнені для параметризації API.

приклад:

@DataProvider(name = "apiData")
public Object[][] apiData() {
  return new Object[][] {
    {"https://api.example.com/users/1"},
    {"https://api.example.com/users/2"}
  };
}

@Test(dataProvider = "apiData")
public void testApi(String url) {
  Response response = RestAssured.get(url);
  Assert.assertEquals(response.getStatusCode(), 200);
}

переваги:

  • Виконує один і той самий виклик API для кількох кінцевих точок або корисних навантажень.
  • Спрощує регресійне тестування для API з різними наборами вхідних даних.
  • Бездоганно інтегрується з інструментами та звітами CI.

49) Як створити власні анотації в TestNG для шаблонів тестування, що використовуються повторно?

Користувацькі анотації можуть стандартизувати повторювані конфігурації тестів або перевірки.

приклад:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
  String description() default "Smoke Test";
}

Використання:

@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }

У поєднанні з рефлексією ви можете динамічно зчитувати ці анотації для групування тестів або керування умовним виконанням.

Ця техніка широко використовується в метапрограмування фреймворку створювати самодокументуючі тести.


50) Як можна поєднати Cucumber та TestNG для гібридних платформ тестування?

TestNG може виступати в ролі бігун-пробник та цінності Cucumber Сценарії BDD, що пропонують потужну звітність та паралелізацію.

Приклад бігуна:

@CucumberOptions(
  features = "src/test/resources/features",
  glue = "stepDefinitions",
  plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }

переваги:

  • Важіль TestNGАвтора анотації, слухачі та звіти.
  • Підтримали паралельне виконання функцій.
  • Інтегрується з залучати та ExtentReports легко.

Цей гібридний підхід поєднує Читабельність BDD з TestNG гнучкість, ідеально підходить для фреймворків корпоративного рівня.


🔍 Верх TestNG Запитання для співбесіди з урахуванням реальних сценаріїв та стратегічних відповідей

Нижче наведено 10 реалістичних, релевантних до предметної області TestNG питання для співбесіди разом із чіткими очікуваннями та переконливими прикладами відповідей.

1) Чи можете ви пояснити ключові переваги використання TestNG у порівнянні з JUnit?

Очікується від кандидата: Продемонструвати розуміння TestNGрозширені функції та чому його часто віддають перевагу для автоматизації підприємств.

Приклад відповіді: "TestNG надає кілька переваг, таких як гнучка конфігурація тестів, підтримка паралельного виконання, залежні методи тестування, тестування на основі даних за допомогою постачальників даних та вбудована звітність. Ці можливості роблять TestNG потужніший для складних систем автоматизації, що потребують масштабованості».


2) Як ви використовуєте TestNG анотації для керування процесом виконання тестів?

Очікується від кандидата: Знання мети та порядку анотації.

Приклад відповіді: "TestNG пропонує анотації, такі як @BeforeSuite, @BeforeClass, @BeforeMethod, @Test, та відповідні їм анотації розбирання. Вони дозволяють структуровано організувати налаштування та очищення тестів. Наприклад, @BeforeMethod виконується перед кожним методом тестування, що корисно для ініціалізації стану браузера.


3) Опишіть складний проект автоматизації, де TestNG відіграв ключову роль.

Очікується від кандидата: Реальний досвід роботи над проектами та здатність чітко формулювати рішення проблем.

Приклад відповіді: «На попередній посаді я працював над проєктом, який вимагав ретельного регресійного тестування в кількох середовищах.» TestNGпаралельне виконання та групаping функції дозволили команді запускати критично важливі пакети програм одночасно, значно скоротивши час виконання, зберігаючи при цьому надійність».


4) Як робити TestNG допомагають групи в ефективній організації та виконанні тестів?

Очікується від кандидата: Розуміння групиping, включаючи механізми включення/виключення.

Приклад відповіді: «Групи в TestNG дозволяють категоризацію тестових випадків, таких як дим, регресія та інтеграція. Використовуючи testng.xml, я можу вибірково запускати групи, виключати нестабільні тести та керувати різними наборами тестів без зміни самого коду.


5) Опишіть ситуацію, коли вам довелося налагоджувати помилку TestNG тести. Яким був ваш підхід?

Очікується від кандидата: Критичне мислення та навички усунення несправностей.

Приклад відповіді: «На попередній посаді я зіткнувся з низкою невдач TestNG тести, які, здавалося, пройшли локально, але не пройшли в CI. Я ввімкнув детальне ведення журналу, переглянув порядок виконання та виявив, що спільний ресурс не скидався між тестами. Потім я реалізував відповідні кроки демонтажу за допомогою @AfterMethod, щоб забезпечити ізоляцію тестів.


6) Як ви впроваджуєте тестування на основі даних за допомогою TestNG?

Очікується від кандидата: Розуміння постачальників даних та варіантів використання.

Приклад відповіді: «Я створюю метод @DataProvider, який повертає дані в масивах Object, а потім прив’язую його до методу @Test за допомогою атрибута dataProvider. Це дозволяє виконувати кілька ітерацій одного й того ж тесту з різними наборами вхідних даних, що корисно для перевірки відправлених форм або варіацій корисного навантаження API».


7) Як ви керуєте залежностями тестів у TestNG?

Очікується від кандидата: Правильне використання dependsOnMethods або dependsOnGroups.

Приклад відповіді: "TestNG дозволяє залежності тестів через атрибути dependsOnMethods та dependsOnGroups. Я використовую залежності, коли тест має виконуватися лише після успішного завершення іншого, наприклад, для перевірки замовлення лише після його створення.


8) Опишіть, як ви використовували TestNG з інструментами безперервної інтеграції.

Очікується від кандидата: Досвід роботи з автоматизованими конвеєрами в реальних умовах.

Приклад відповіді: «На попередній роботі я інтегрував TestNG з Jenkins шляхом налаштування збірки Maven для генерації TestNG Звіти у форматі HTML та XML. Jenkins потім архівував звіти та відображав результати після кожного циклу збірки. Ця інтеграція допомогла команді tracшвидко відключати збої та підтримувати стабільність випуску».


9) Розкажіть мені про випадок, коли вам доводилося працювати в умовах жорстких термінів, одночасно керуючи кількома завданнями автоматизації.

Очікується від кандидата: Управління часом та вміння розставляти пріоритети.

Приклад відповіді: «На моїй попередній посаді мені потрібно було оновити існуючі TestNG набори тестів, а також створював нові для майбутнього релізу. Я пріоритезував завдання на основі впливу на бізнес, спочатку автоматизував області з найвищим рівнем ризику та використовував TestNG групуватиping виділити завершені розділи для раннього перегляду. Це забезпечило своєчасне виконання без шкоди для якості».


10) Як би ви розробили масштабований TestNG фреймворк для великого застосунку?

Очікується від кандидата: Archiрозуміння текстур, закономірностей та найкращих практик.

Приклад відповіді: «Я б розробив модульний фреймворк, використовуючи модель об’єктів сторінки, інтегрував би TestNG для керування виконанням та використовувати DataProviders для сценаріїв, керованих даними. Я б також налаштував паралельне виконання, централізував утиліти та виніс на екстернал налаштування конфігурації, щоб фреймворк залишався масштабованим та зручним у підтримці в міру зростання програми».

Підсумуйте цей пост за допомогою: