51CTO官微
技术资讯/行业精华/产品心得
多年来,Java一直是服务器端应用开发的首选编程语言。随着时间的推移和自动化测试的兴起,业界出现了许多基于Java,并根据不同的业务逻辑而发展起来的开源框架。在此,我向大家介绍并比较五种用到了Java的自动化测试框架。
1.JUnit
由Kent Beck和Erich Gamma开发的JUnit是xUnit框架的一个实例。其设计的宗旨是让Java开发人员能够编写出各种脚本、并执行那些可重复的测试用例。因此,JUnit通常被用来测试各种小块的程序代码。同时,您还可以通过将JUnit与Selenium WebDriver相集成,来执行针对某个网站的自动化测试。不过,只要添加了任何新的代码,您都需要重新执行整个测试用例、以确保无任何损坏。
安装JUnit的先决条件
由于JUnit是一种基于Java的框架,因此它与Java的Selenium WebDriver高度兼容。您需要准备如下先决条件:
安装最新版本的JDK。
下载最新版本的JUnit,并设置相关的环境。
熟悉使用面向对象编程语言(尤其是Java)进行应用开发。
JUnit的优点和缺点
JUnit有如下优点:
由于必须阅读代码、并查找异常,因此开发人员普遍能够对以测试为驱动的环境处之泰然。
能够尽早地检测出错误,进而产生更为可靠的程序代码。
能够开发出更具可读性且无bug的程序代码,以增强项目相关人员的信心。
最新版本的JUnit(版本4)不但可以更加轻松地识别出各种异常,而且能够执行那些由旧版JUnit所编写的测试用例。
可与Java 5及以上版本一起使用。
JUnit的唯一缺点是:
该框架无法执行依赖性测试。
JUnit的特点与竞品比较
JUnit与下面将要提到的TestNG具有相似的功能。但是两者在参数化测试的实现过程上不尽相同。由于历史悠久,JUnit拥有更好的社区支持,并被定义为使用Selenium WebDriver进行基于Java类应用单元测试的标准。而TestNG虽然目前用户相对较少,但是其社区规模却日益增长。因此,我们认为:是选择JUnit、还是TestNG作为Java测试的框架,完全取决于目标应用的性质和需求。
当然,如果您已选定了使用JUnit的话,请参考《使用JUnit和Selenium执行自动化测试》一文,以针对浏览器的兼容性开展分步测试。
2.JBehave
作为测试人员,您一定听说过行为驱动开发(Behavior Driven Development,BDD)。它能够以一种透明的方式,向业务用户描述验收测试。而JBehave正是一种通过Selenium WebDriver来针对BDD开展Java测试的框架。它可以让新手轻松地理解BDD概念,进而基于行为开展应用测试。
安装JBehave的先决条件
用户使用JBehave的理想方法是与Eclipse相集成。因此,除了具有JDK1.7及更高版本,和Indigo以上的任意Eclipse IDE之外,您还需要配备如下jar文件:
JUnit-4.1.0.jar
Jbehave-core-3.8.jar
Commons-lang-2.4.jar
Paranamer-2.5.jar
Freemarker-2.3.9.jar
Org.apacje.commons.io.jar
Org.apache.commons.collections.jar
Plexus-utils-1.1.jar
JBehave的优点和缺点
与所有其他BDD测试框架一样,JBehave具有如下优点:
协调具有类似规范、却身处不同项目的开发团队,来实现行为驱动式的开发。
根据类似的规范格式,让项目经理和利益相关者对开发团队和QA团队的输出具有更清楚地了解。
由于JBehave具有更多值得用户推理和思考的细节,因此目标产品会具有更好的规范性。
由于使用了半正式(semi-formal)语言、以及域词汇表(domain vocabulary),因此JBehave有助于在团队结构中保持一致性的行为。
JBehave同样也有着其他BDD测试工具一样的缺点:
一款BDD测试工具的成功,主要取决于项目中不同成员,包括:利益相关者、开发人员和测试人员之间的沟通,以及组织的管理。反之,沟通的缺乏则可能会导致无法逾越的问题、有缺陷的应用、业务需求未被满足、以及各方的互相推诿。
JBehave的特点与竞品比较
JBehave与下面将要提到的Serenity有着相同的工作方式。但是,如果您的目标是使得自动验收测试更为有效的话,那么将Serenity与JBehave相集成,则会获得更好的测试体验。
3.Serenity
Serenity同样是一种能被用于行为驱动测试的开源库。该框架可帮助您编写出各种结构良好、且易于维护的验收标准。它在一定程度上扩展了JUnit和WebDriver的功能。
安装Serenity的先决条件
由于该框架基于Java,因此您显然需要具备Java、或其他任何面向对象编程语言的知识与经验。此外,您的电脑上还需要有:
JDK 5或更高版本。
Maven 3.0或更高版本。
由于Maven和Eclipse的组合更易于使用,因此作为IDE工具的Eclipse通常是所有开发人员首选的。
Serenity的优点和缺点
针对行为驱动测试,Serenity具有如下优点:
该框架能够帮助测试人员创建各种REST服务的测试用例。
用户不必花费大量的时间,来维护或构建自己的自动化框架。
它能够在定义、理解测试用例、以及实现方式建立平衡。
它可以与许多自动化框架相集成,其中包括:Selenium、JBehave、基于Java的高级开发框架(如Spring)、甚至是JIRA之类的持续集成工具。
与JBehave类似,Serenity的唯一缺点便是:为了充分发挥其支持行为驱动开发的完整功能,项目参与者需要保持彼此之间的沟通。
Serenity的特点与竞品比较
由于主要被用于报告验收的标准,因此使用Serenity所写出的报告,比JBehave等其他BDD框架具有更丰富信息量。同时,它还可以帮助开发人员编写出更高质量的自动化测试用例场景。另外,它能够为RestAssured和Selenium WebDriver提供支持,使得测试人员能够更快、更简便地写出基于验收测试标准的自动化用例。
4.TestNG
也许是受到了JUnit的启发,由Cedric Beust创建的TestNG也是一种基于Java的开源自动化测试框架,不过它更为强大。此处NG表示“下一代”,因此它能够在集成的过程中采用更好的执行方式。该框架可帮助开发人员实现排序、分组和参数化等功能,进而在消除了以往框架各种缺点的基础上,让新的测试用例更具灵活性。
安装TestNG的先决条件
在系统中已安装了最新版本的JDK。
最新版本的Eclipse。
具备Java或其他任何面向对象编程语言的知识和实践经验。
TestNG的优点和缺点
在弥补过往框架诸多缺点的基础上,TestNG还具备如下优点:
该框架能使用户在多个代码片段上运行各种并行的测试。
在执行用例测试的期间,您可以生成一份HTML报告。
可以根据优先级对测试用例进行分组和排列。该框架大幅简化了数据库测试、前端测试等方面。
您可以对数据采取参数化、并使用注释来轻松地设置优先级。当然,如果您的项目并不需要测试用例的优先级,则也没必要用到TestNG。
它的唯一缺点是:
用户需要一些时间来设置TestNG。
TestNG的特点与竞品比较
如前所述,TestNG虽然与JUnit有着相同的功能,但是它补足了JUnit的短板。在面对既有的依赖性,您却无法控制先测试哪个的时候,TestNG允许您以任意顺序运行测试用例。此外,它还有助于实现参数化的测试。虽然JUnit 4.5已经具备了此功能,但是TestNG的实现效率更高。因此,如果您的项目很复杂、并且需要执行上百种测试用例的话,花点时间去设置TestNG是完全值得的。
如果您不太熟悉TestNG的话,请通过参考:https://www.lambdatest.com/blog/a-complete-guide-for-your-first-testng-automation-script/?utm_source=Dzone&utm_medium=blog&utm_campaign=SS-030419&utm_term=arnab。这是一份TestNG自动化脚本的完整指南,您可以用在Selenium WebDriver上,进行跨浏览器的Java自动化测试。
5.Selenide
由Selenium提供的Selenide,可用作为Java应用程序编写稳定、精确且具有友好UI的测试用例。如今,针对Ajax之类Web技术的测试工具日趋复杂,动辄便会出现超时的问题。而Selenide却能够以简单的方式处理该问题。Selenide简单易学,您无需搜索任何相关教程,只需专注于业务逻辑,便可通过几行简单的代码来搞定工作。
使用Selenide的先决条件
Selenide的安装非常简单。如果您使用的是Maven,则只需要在pom.xml文件中添加如下代码行:
com.codeborne selenide 5.1.0 test
如果您使用的是Ivy,请在ivy.xml文件中添加如下代码行:
Selenide的优点和缺点
在测试人员处理那些由Java编写的前端应用时,往往会碰到超时的问题。也许您当前编写的测试用例尚能正常工作。而几天之后,随着某些Ajax请求的增多,相应的JavaScript的运行则可能会慢下来。此外,如果您的系统还同时运行着另一个进程的话,这些都会导致测试用例的失败。您与其花上几天时间去寻找问题的根源,不如让Selenide从如下方面帮助您:
简洁的测试用例编写过程,消除了超时的问题。
能够测试由AngularJS所开发的应用程序。
减少了各种传统Selenium工具中的大量命令。
目前,我们尚未发现Selenide的明显缺点。
Selenide的特点与竞品比较
WebDriver虽然是UI测试的流行工具,但是它无法解决由Ajax超时、JavaScript运行缓慢、以及加载动态内容耗时等一系列问题。过去,我们在测试用例中使用的是“wait_until”或“sleep”方法。如今有了Selenide,我们只要关注业务逻辑便可。可以说,就UI测试而言,除了Selenium WebDriver(Selenide的父框架),没有比它更好的Java框架了。
如果您选定了Selenide作为自动化Java测试框架,请参考:https://www.lambdatest.com/blog/selenium-testing-with-selenide-using-intellij-maven/?utm_source=Dzone&utm_medium=blog&utm_campaign=SS-030419&utm_term=arnab。该指南能够帮助您使用Selenide、IntelliJ和Maven来进行Selenium的自动化测试。
总结
如今的敏捷(Agile)时代,开发人员时常需要参与到测试环节中。能够了解测试的重要性,往往是Java专业开发人员与业余爱好者之间的区别。虽然您没有必要一定成为该领域的专家,但是您至少应当懂得,如何编写可自动化验证代码的测试用例。希望上述介绍与比较的五种自动化测试框架与工具,能够在UI测试、单元测试、以及针对应用程序的BDD测试中给您提供帮助。
原文标题:Top 5 Java Test Frameworks for Automation in 2019,作者:Arnab Roy
51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com