Selenium 中的 TestNG 和 JUnit 框架是什么?
JUnit 和 TestNG 是 Java 应用程序或 Selenium 最流行的测试框架。这两个框架都易于使用。因此,在为您的应用程序选择测试框架时,最好对其中一个或另一个框架具有的功能有一个高级的了解,然后根据您的项目需求做出明智的决定。
在本文中,我们将讨论 JUnit 和 TestNG。
什么是 TestNG
根据其文档,TestNG 的定义如下:
TestNG 是一个受 JUnit 和 NUnit 启发的测试框架,但引入了一些新功能,使其功能更强大且更易于使用。
TestNG 是一个开源的自动化测试框架,其中 NG 代表 NextGeneration。TestNG 类似于 JUnit(尤其是 JUnit 4),但它不是 JUnit 的扩展。它受到 JUnit 的启发。它旨在比 JUnit 更好,尤其是在测试集成类时。TestNG 的创建者是 Cedric Beust。
TestNG 消除了大多数旧框架的限制,使开发人员能够编写更灵活和强大的测试。由于它大量借鉴了 Java 注解(在 JDK 5.0 中引入)来定义测试,因此它还可以向您展示如何在真实的生产环境中使用 Java 语言的这一新功能。
什么是 JUnit?
与任何其他测试框架相比,JUnit 促使开发人员理解测试(尤其是单元测试)的有用性。JUnit 利用相当简单、务实且严格的架构,已经能够“感染”大量的开发人员。请查看我们关于 JUnit 的教程,以深入了解其功能。同时,JUnit 也有一些缺点,如下所示:
最初设计用于仅启用单元测试,现在用于各种测试。
无法进行依赖项测试。
配置控制较差(setUp/tearDown)。
侵入性(强制您扩展类并以某种方式命名您的方法)。
静态编程模型(强制您不必要地重新编译)。
在复杂项目中管理不同的测试套件可能非常棘手。
Junit 与 TestNG
JUnit 当前版本为 5.7.1,它仍在不断发展并努力包含更多功能。TestNG 当前版本为 7.4.0,它已经成熟且功能丰富。
下表比较了 JUnit 与 TestNG 在不同功能上的差异。该表排除了这两个框架中都存在的一些非常具体或常见的功能,例如测试异常、超时设置、生命周期回调方法等。
功能 |
JUnit |
TestNG |
结论 |
---|---|---|---|
注解 |
基于注解 |
基于注解 |
JUnit 5 和 TestNG 都是基于注解的。它们在本质和行为上相似。 |
易用性 |
JUnit 5 内置于各种模块中;您需要 JUnit Platform 和 JUnit Jupiter 来编写测试用例。如果您需要更多功能(例如参数化测试),则需要添加 junit-jupiter-params 模块。 |
单个模块即可获得所有 TestNG 功能。 |
就易用性而言,TestNG 更好。 |
IDE 支持 |
受主流 IDE(如 Eclipse 和 IntelliJ IDEA)支持。 |
受主流 IDE(如 Eclipse 和 IntelliJ IDEA)支持。 |
两者都相似,并且可以轻松集成到主流 IDE 中。 |
数据提供者 |
支持多种提供测试数据的方式,例如方法、枚举、CSV、CSV 文件等。 |
支持数据提供者方法和来自测试套件 xml 文件。 |
JUnit 更适合注入测试方法输入数据 |
测试套件 |
在 JUnit 中,测试套件使用 @RunWith 和 @Suite 注解运行。 |
TestNG 使用 XML 文件运行套件测试。 |
|
HTML 报告 |
JUnit 需要外部插件 maven-surefire-report-plugin 来生成 HTML 报告。 |
TestNG 自动为测试运行创建 HTML 报告。 |
TestNG HTML 报告看起来过时了,但使用起来很简单。如果您必须与其他人共享 HTML 报告,建议使用 JUnit。 |
从 Java 主方法运行 |
我们可以使用 JUnit 5 启动器 API 从 java 主方法运行测试。 |
我们可以使用 TestNG run() 方法从 java 主方法执行测试。 |
两者都支持从 java 主方法执行测试用例。 |
断言 |
JUnit 提供了足够的断言方法来比较预期和实际测试结果。 |
TestNG 提供了足够的断言方法来比较预期和实际测试结果。 |
两者在断言支持方面相似。 |
假设 |
JUnit 支持假设,根据某些条件跳过测试。 |
TestNG 不支持假设。 |
如果您想根据条件跳过测试,则 JUnit 更好。 |
测试顺序 |
Junit 不支持测试顺序。 |
TestNG 支持测试顺序,以便根据优先级属性对测试方法进行排序。 |
当您想按特定顺序执行测试时,TestNG 更好。 |
禁用测试 |
JUnit 支持多种禁用和启用测试的方法。例如,基于操作系统、JRE、系统属性。 |
TestNG 支持禁用测试,但功能有限。 |
当您想根据条件禁用或启用测试时,JUnit 更好。 |
并行执行 |
JUnit 5 尚未支持并行执行。 |
如果通过 XML 套件运行,TestNG 支持并行执行。 |
目前,TestNG 更适合并行执行,JUnit 5 正在开发中以支持此功能。 |
监听器 |
JUnit 通过 Launcher API 支持监听器,没有使用注解添加监听器的机制。 |
TestNG 支持各种类型的监听器,并且可以使用注解添加。 |
与 JUnit 5 相比,TestNG 监听器支持要好得多。 |