Върнете се в началото 50 TestNG Въпроси и отговори за интервю (2026)

Топ TestNG Въпроси и отговори за интервюта

Подготовка за TestNG интервю? Време е да обмислите въпросите, които показват силните ви страни. Солиден TestNG Основата на интервюто разкрива дълбочина, увереност и готовност, ценени от екипите по наемане на персонал.

Възможностите в тази област обхващат растеж на автоматизацията, развиващи се рамки и практически приложения за тестване, изискващи технически и професионален опит. Работата в тази област изисква експертни познания в областта, аналитични умения и гъвкав набор от умения, които помагат на начинаещи, средно и старши специалисти да решават често задавани въпроси и да получават отговори от технически, основни и напреднали специалисти.
Чети повече…

👉 Безплатно изтегляне на PDF: TestNG Въпроси и отговори за интервю

Топ TestNG Въпроси и отговори за интервюта

1) Какво е TestNG и защо се използва в автоматизираното тестване?

TestNG (Test Next Generation) е рамка за тестване, вдъхновена от JUnit и NUnit, но подобрен с разширени възможности като групиране, секвениране, параметризация и управление на зависимости. Използва се предимно в автоматизираното тестване за рационализиране на изпълнението на тестове, подобряване на организацията на тестовете и генериране на подробни HTML и XML отчети.

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

  • Поддържа паралелно изпълнение на тестове, намалявайки общото време за изпълнение.
  • Осигурява анотации които ефективно контролират тестовия поток.
  • Оферти тестване, управлявано от данни през @DataProvider анотация.
  • Генерира персонализирани отчети за по-добро отстраняване на грешки.

Например, TestNG позволява ви да изпълнявате групи от тестове за дим, регресия и интеграция независимо, без да променяте тестовия код, предлагайки гъвкавост и мащабируемост в големи автоматизирани пакети.


2) Обяснете TestNG жизнен цикъл с анотации и реда на тяхното изпълнение.

- TestNG Жизненият цикъл определя как тестовете се инициализират, изпълняват и прекратяват. Той се контролира чрез анотации, които осигуряват структура и яснота на тестовия поток.

анотация Descriptйон Заповед за изпълнение
@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
групировка Не се поддържа Поддържа се с помощта на 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) Обяснете концепцията за групиране TestNG.

Групиране в 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 Actions за автоматизирано изпълнение.

Това разнообразие осигурява съвместимост между развойната, тестовата и производствената среда.


9) Какви са TestNG слушателите и защо са важни?

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

Често срещани слушатели:

  • ITestListener: Проследява събития на ниво метод за тестване.
  • ISuiteListenerНаблюдава събития на ниво апартамент.
  • IReporterГенерира персонализирани отчети.

Пример:

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

Слушателите често се използват за приемане снимки на екрана при неуспех, генериране персонализирани лог файлове или интегриране с инструменти за отчитане като Allure или ExtentReports.


10) Какви са предимствата и недостатъците на използването TestNG?

Аспект Предимства Недостатъци
Гъвкавост Поддържа групиране, зависимости и паралелно изпълнение Сложна XML настройка за големи пакети
Докладване Предоставя подробни HTML и XML отчети Ограничена персонализация без слушатели
Integration Работи безпроблемно с 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 Високо
Използвайте делото Променливи на околната среда Многократни тестове, базирани на данни

Следователно, @DataProvider е за предпочитане при изпълнение на един тест с множество набори от данни, като например проверка на вход с множество идентификационни данни.


14) Как можете да деактивирате или пропуснете тест в TestNG?

Можете да деактивирате тест в TestNG използване на enabled атрибут или чрез програмното му пропускане.

1. Използвайки enabled = false:

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

2. Прескачане по време на изпълнение с помощта на SkipException:

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

Деактивирането е полезно за временно деактивиране нестабилни или непълни тестове, без да ги изтривате. Пропускането е ценно за условия по време на изпълнение, като например пропускане на тестове за неподдържани браузъри.


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 extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();

Тези отчети са от съществено значение за проследяване на тенденциите и идентифициране на слаби области в тестовото покритие.


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);
  }
}

Предимства:

  • дава възможност на създаване на параметризирани обекти.
  • Идеален за тестване на различни браузъри намлява изпълнение в множество среди.
    Фабриките допълват DataProviders, когато се нуждаете от различни конфигурации на обекти, а не само от вариации на данни на ниво метод.

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
Изпълнение Писти преди всеки метод на тестване Писти някога преди всеки метод в класа
Обхват Според метода на изпитване На тестов клас
Обща употреба Инициализиране на браузъра преди всеки тест Зареждане на конфигурацията или настройката на браузъра еднократно

Пример:

@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();
}

Ползи от интеграцията:

  • дава възможност на паралелно тестване на браузъри.
  • Опростява групиране и отчитане на тестове.
  • Работи безпроблемно с CI / CD тръбопроводи като Jenkins или GitHub Actions.

27) Кои са някои от най-добрите практики при използване TestNG в големи рамки за автоматизация?

Най-добри практики:

  1. употреба Descriptименуване: Давайте имена на тестовете въз основа на поведението, а не на имплементацията.
  2. Групиране на ливъридж: Създайте логически тестови групи (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

Пример за код:

@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 Command

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 се интегрира безпроблемно с Дженкинс, GitLab CI или Действия на GitHub чрез Maven или Gradle изгражда.

Стъпки в Jenkins:

  1. Инсталирайте Плъгин за интеграция с Maven.
  2. Създаване на Работа по свободен стил или тръбопровод.
  3. Добави mvn clean test като стъпка от изграждането.
  4. След изграждане, конфигуриране на HTML отчети:
    • Директория за отчети: test-output
    • Индексен файл: index.html

Ползи:

  • Позволява автоматизирано регресионно тестване.
  • Осигурява планирани тестове и проследяване на тенденции.
  • Осигурява последователно изпълнение на тестовете в различни среди.

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...");
}
Атрибут Descriptйон
invocationCount Брой пъти, в които даден метод се изпълнява
threadPoolSize Брой едновременни нишки

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


39) Как се изпълняват само неуспешни тестове в TestNG?

След бягане в апартамент, TestNG генерира файл с име testng-failed.xml в test-output директория.

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

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

Предимства:

  • Спестява време, като пропуска успешни тестове.
  • Улеснява отстраняването на грешки в големи пакети.
  • Често се използва в 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
Цел Генерира персонализирани отчети след изпълнение на теста Проследява и реагира на събития по време на тестване
призоваване След приключване на всички тестове По време на жизнения цикъл на теста (старт, успех, неуспех)
Продукция 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 Код:

@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 pipeline.

Ползи:

  • дава възможност на мащабируемо паралелно тестване.
  • Намалява разходите за настройка на средата.
  • Осигурява последователно изпълнение на тестовете в разпределени контейнери.

45) Каква е разликата между паралелното изпълнение на ниво пакет, тест и метод в TestNG?

ниво Паралелен атрибут Поведение при изпълнение
апартамент parallel="suites" Изпълнява няколко пакета едновременно
тест parallel="tests" Писти <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());
}

Причини за пропускане:

  • Зависим неуспех на теста.
  • Условно пропускане чрез SkipException.
  • Недостъпност на средата.

Най-добри практики:
Записвайте причините за пропускане и следите на стека за проследяване в 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Е анотации, слушатели и отчети.
  • Поддържа паралелно изпълнение на функции.
  • Интегрира се с Привлекателност намлява Отчети за степента лесно.

Този хибриден подход обединява Четливост на BDD с TestNG гъвкавост, идеален за рамки от корпоративен клас.


🔍 Най-горе TestNG Въпроси за интервю с реални сценарии и стратегически отговори

По-долу са изброени 10 реалистични, релевантни за домейна TestNG въпроси за интервю, заедно с ясни очаквания и убедителни примерни отговори.

1) Можете ли да обясните основните предимства на използването TestNG в сравнение с JUnit?

Очаквано от кандидата: Демонстрирайте разбиране на TestNGподобрените функции и защо често е предпочитан за корпоративна автоматизация.

Примерен отговор: "TestNG предоставя няколко предимства, като например гъвкава конфигурация на тестове, поддръжка за паралелно изпълнение, зависими методи за тестване, тестване, управлявано от данни с DataProviders и вградено отчитане. Тези възможности правят TestNG по-мощни за сложни рамки за автоматизация, които изискват мащабируемост.“


2) Как използвате TestNG анотации за контрол на потока на изпълнение на тестове?

Очаквано от кандидата: Познаване на целта и реда на анотацията.

Примерен отговор: "TestNG предлага анотации като @BeforeSuite, @BeforeClass, @BeforeMethod, @Test и съответните им анотации за разглобяване. Те позволяват структурирана организация на настройката и почистването на теста. Например, @BeforeMethod се изпълнява преди всеки тестов метод, което е полезно за инициализиране на състоянието на браузъра.


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

Очаквано от кандидата: Реален опит в проекти и способност за артикулиране на решаване на проблеми.

Примерен отговор: „В предишната си роля работих по проект, който изискваше обширно регресионно тестване в множество среди.“ TestNGФункциите за паралелно изпълнение и групиране позволиха на екипа да изпълнява критични пакети едновременно, намалявайки значително времето за изпълнение, като същевременно запазвайки надеждността.


4) Как да TestNG помагат ли групите за ефективното организиране и провеждане на тестове?

Очаквано от кандидата: Разбиране на групирането, включително механизмите за включване/изключване.

Примерен отговор: „Групи в 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 build за генериране TestNG HTML и XML отчети. След това Jenkins архивира отчетите и показва резултатите след всеки цикъл на изграждане. Тази интеграция помогна на екипа бързо да проследява грешките и да поддържа стабилност на изданието.


9) Разкажете ми за случай, в който ви се е налагало да работите при кратки срокове, докато управлявате множество задачи за автоматизация.

Очаквано от кандидата: Управление на времето и способност за приоритизиране.

Примерен отговор: „В последната ми роля трябваше да актуализирам съществуващите TestNG тестови пакети, като същевременно създавах нови за предстоящо издание. Приоритизирах задачите въз основа на въздействието им върху бизнеса, автоматизирах първо областите с най-висок риск и използвах TestNG групиране, за да се изолират завършените раздели за ранен преглед. Това гарантира навременна доставка без компромис с качеството.“


10) Как бихте проектирали мащабируем TestNG рамка за голямо приложение?

Очаквано от кандидата: Archiразбиране на текстурата, модели и най-добри практики.

Примерен отговор: „Бих проектирал модулна рамка, използвайки обектния модел на страницата, интегрирал бих TestNG за управление на изпълнението и използвайте DataProviders за сценарии, управлявани от данни. Бих конфигурирал също паралелно изпълнение, централизирал помощните програми и екстернализирал настройките за конфигурация, така че рамката да остане мащабируема и поддържаема с нарастването на приложението.“

Обобщете тази публикация с: