TestNG面试题

2025年3月17日 | 阅读 8 分钟
TestNG Interview Questions

以下是一些最常问的TestNG面试题及答案

1) 什么是 TestNG?

TestNG 是“Testing Next Generation”的缩写。它是一个用于 Java 编程语言的自动化测试框架,由 Credric Beust 开发,其灵感来源于 JUnit 框架。TestNG 包含了 JUnit 框架的所有功能,并增加了一些额外的功能,使其更加强大。


2) TestNG 的优点是什么?

TestNG 的优点如下:

  • 它以恰当的格式生成报告,包含以下信息:
    • 已执行的测试用例数量。
    • 通过的测试用例数量。
    • 失败的测试用例数量。
    • 跳过的测试用例数量。
  • 可以通过将多个测试用例转换为 testng.xml 文件来轻松地对它们进行分组,在其中可以设置每个测试用例的优先级,从而确定哪个测试用例应该先执行。
  • 借助 TestNG,您可以在多个浏览器上执行多个测试用例,这称为跨浏览器测试。
  • TestNG 框架可以轻松地与其他工具集成,如 Maven、Jenkins 等。
  • TestNG 框架中使用的注解易于理解,例如 @BeforeMethod、@AfterMethod、@BeforeTest、@AfterTest。
  • WebDriver 不会生成报告,而 TestNG 会生成可读性强的报告。
  • TestNG 简化了测试用例的编码方式。我们不必编写静态 main 方法。操作顺序仅由注解来维护。
  • TestNG 允许您单独执行测试用例。例如,如果您有六个测试用例,那么每个测试用例编写一个方法。当我们运行程序时,五个方法执行成功,第六个方法失败。要修复错误,我们只需要运行第六个方法,这只能通过 TestNG 实现。因为 TestNG 会在测试输出文件夹中生成 testng-failed.xml 文件,我们只需要运行此 xml 文件来执行失败的测试用例。

3) 如何在 TestNG 中运行测试脚本?

您可以通过右键单击 TestNG 类,然后选择“Run As”并选择“TestNG test”来运行 TestNG 中的测试脚本。


4) TestNG 中使用的注解有哪些?

TestNG 中使用的注解如下:

  • 前置条件注解
    前置条件注解在测试方法执行之前执行。前置条件注解包括 @BeforeSuite、@BeforeClass、@BeforeTest、@BeforeMethod。
  • 测试注解
    测试注解在测试方法定义之前指定。它指定为 @Test。
  • 后置条件注解
    后置条件注解在所有测试方法执行之后执行。后置条件注解可以包括 @AfterSuite、@AfterClass、@AfterTest、@AfterMethod。

5) TestNG 中所有注解的执行顺序是什么?

TestNG 中所有注解的执行顺序如下:

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

6) 如何在 TestNG 中设置优先级?

如果我们不为测试方法设置优先级,则测试方法将按字母顺序选择并执行。如果我们希望测试方法按照我们想要的顺序执行,那么我们需要在 @Test 注解中提供优先级。

让我们通过一个例子来理解。


7) 定义 TestNG 中的分组?

分组是 TestNG 中的一个属性,它允许您执行多个测试用例。例如,如果我们有 100 个 IT 部门的测试用例和 10 个 HR 部门的测试用例,并且您想在单个套件中一起运行 IT 部门的所有测试用例,这只能通过分组来实现。

让我们通过一个例子来理解。

testng.xml


8) TestNG 中的依赖是什么?

当我们需要按特定顺序运行测试用例时,我们会使用 TestNG 中的依赖概念。

TestNG 中使用的两种依赖属性:

  • dependsOnMethods
    dependsOnMethods 属性告诉 TestNG 该测试将依赖于哪些方法,以便这些方法将在该测试方法之前执行。
  • dependsOnGroups
    它类似于 dependsOnMethods 属性。它允许测试方法依赖于一组测试方法。它会在依赖的测试方法之前执行一组测试方法。

9) TestNG 中的 timeOut 是什么?

在运行测试用例时,可能会出现某些测试用例花费的时间比预期长得多。在这种情况下,我们可以使用 timeOut 将该测试用例标记为失败。

TestNG 中的 timeOut 允许您配置等待测试完全执行的时间。它可以在两个级别进行配置:

  • 在套件级别: 它将可用于所有测试方法。
  • 在每个方法级别: 它将可用于特定的测试方法。

timeOut 属性可以按如下方式指定:

上面的 @Test 注解表明,测试方法将有 700 毫秒的时间来完成其执行,否则将被标记为失败的测试用例。


10) TestNG 中的 invocationCount 是什么?

TestNG 中的 invocationCount 是我们希望执行同一测试的次数。

输出

TestNG Interview Questions

11) testng.xml 文件有什么重要性?

testng.xml 文件之所以重要,原因如下:

  • 它定义了所有测试用例的执行顺序。
  • 它允许您对测试用例进行分组,并可以根据需要执行。
  • 它执行选定的测试用例。
  • 在 TestNG 中,可以在套件级别实现监听器。
  • 它允许您将 TestNG 框架与 Jenkins 等工具集成。

12) 如何通过 testng.xml 文件将参数传递给测试用例?

我们也可以在运行时将值传递给测试方法,这可以通过 testng.xml 文件发送参数值来实现。我们可以使用 @Parameter 注解。

让我们通过一个例子来理解

testng.xml 文件

运行 testng.xml 文件时,输出如下:

TestNG Interview Questions
TestNG Interview Questions

13) 如何禁用测试用例的运行?

我们可以使用 enabled 属性来禁用测试用例的运行。我们可以将 false 值赋给 enabled 属性,这样就可以禁用测试用例的运行。


14) soft assertion 和 hard assertion 有什么区别?

Soft Assertion(软断言): 在 Soft Assertion 的情况下,如果 TestNG 在 @Test 期间遇到错误,它会在断言失败时抛出异常,并继续执行 assert 语句之后的下一个语句。

Hard Assertion(硬断言): 在 Hard Assertion 的情况下,如果 TestNG 在 @Test 期间遇到错误,它会在断言失败时立即抛出 AssertException,并在 assert 语句之后停止执行。

让我们通过一个例子来理解。

输出

TestNG Interview Questions

15) TestNG 中 @Listener 注解的用途是什么?

TestNG 提供了不同种类的监听器,它们可以在事件触发时执行不同的操作。TestNG 中最常用的监听器是 ITestListener 接口。ITestListener 接口包含 onTestSuccess、onTestfailure、onTestSkipped 等方法。

以下是可以实现的情景:

  • 如果测试用例失败,监听器应该执行什么操作。
  • 如果测试用例通过,监听器应该执行什么操作。
  • 如果测试用例被跳过,监听器应该执行什么操作。

让我们通过一个例子来理解。

Listener.java

输出

TestNG Interview Questions

16) @Factory 注解的用途是什么?

当我们需要通过单个测试类运行多个测试用例时,@Factory 注解非常有用。它主要用于动态执行测试用例。

让我们通过一个例子来理解。

testcase1.java

testcase2.java

Factory.java


17) @Factory 和 @DataProvider 注解有什么区别?

@DataProvider: 它是 TestNG 使用的注解,用于根据 DataProvider 提供的数据多次执行测试方法。

@Factory: 它是 TestNG 使用的注解,用于使用相应类的不同实例来执行同一测试类中的测试方法。