几十年来,Java一直是开发应用程序服务器端的首选编程语言。尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试行业的发展,特别是伴随着自动化测试的兴起,已经开发了许多基于Java的开源框架,它们在验证和业务逻辑方面与JUnit有所不同。在这里,我将讨论用于使用Selenium WebDriver执行测试自动化的顶级Java测试框架,还将重点介绍这些顶级Java测试框架的优缺点和独到之处。

JUnit

Junit是开发人员基于xUnit基础上开发的一个实用案例。其最初主要目的是使Java开发人员能够编写脚本并执行可重复的测试用例。它通常用于测试一小段代码。您还可以通过将JUnit与用于测试自动化的Selenium集成来执行网站的自动化测试。每当添加任何新代码需要发版时,都需要重新执行整个测试用例,并确保没有不影响原有功能。

有哪些先决条件?

该框架与Selenium WebDriver for Java高度兼容,因此,JUnit和Selenium WebDriver也是完全兼容的,作为某些先决条件,您需要

  • 在工作项目中使用较新版本的JDK。
  • 下载最新版本的JUnit并设置环境。
  • 对面向对象的编程语言(Java)的应用程序开发有很好的使用经验。

使用JUnit的优缺点?

JUnit有几个优点:

  • 在受测试驱动的环境中工作的开发人员发现它非常有好处,因为他们被迫阅读代码并查找是否存在BUG。
  • 尽早检测到错误,从而使代码可靠性大大提高。
  • 开发更具可读性且无错误的代码可以增强可信度。
  • 使用最新版本的JUnit(版本5),可以轻松识别异常,也可以执行用旧版JUnit编写的测试用例。
  • 您也可以将其与Java 5以及更高版本一起使用。

JUnit的唯一缺点是:

  • 该框架无法执行依赖性测试。那就是我们需要TestNG的地方。

JUnit是您的最佳Java测试框架吗?

JUnit和TestNG都执行相同的工作。它们的功能几乎相同,只是在两个框架中,JUnit无法进行依赖测试,并且参数化测试的实现过程不同。另外,由于JUnit长期使用,因此有更好的社区支持,它已被定义为使用Selenium WebDriver for Java的应用程序进行单元测试的标准。尽管TestNG的用户很少,但社区仍然很大,并且每天都在增长。因此,我们可以得出结论,对于Java测试框架,在TestNG或JUnit之间进行选择完全取决于应用程序的性质和要求。

JBehave

我们都知道行为驱动开发(BDD)。这种测试类型以对业务用户透明的方式描述了验收测试。JBehave是用于BDD测试的另一个Java测试框架,主要与Selenium WebDriver for Java一起使用。使用JBehave的主要目的是使新手可以轻松理解和熟悉BDD。这是一种设计理念,它使应用程序的测试阶段更多地基于其行为。

有哪些先决条件?

使用JBehave的理想方法是与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在许多方面也具有优势。

  • 使规范相似的不同项目的不同开发团队之间更好地协调,可以达到行为驱动开发的最重要目的。
  • 由于规范相似,因此项目经理和利益相关者可以更好地了解开发团队和质量检查团队的输出。
  • 由于JBehave具有详细的逻辑推理和思考功能,因此产品具有更好的可靠性。
  • JBehave使用半正式语言,并且还具助于在团队结构中保持一致的行为的功能。

跟其他任何BDD测试工具一样,JBehave只有一个缺点。

  • BDD测试工具的成功主要取决于项目中不同成员,利益相关者,开发人员,测试人员以及组织管理层之间的沟通。缺乏沟通可能会导致无法及时发现和快速解决的问题,进而可能导致导致应用程序发生错误或者与实际业务需求相悖,最终导致所有各方互相指责(甩锅)。

JBehave是适合您的最佳Java测试框架吗?

JBehave的工作方式与Serenity相同。但是,如果您打算提高自动验收测试的效率,则最好将Serenity与JBehave集成在一起,以利用更好的测试体验。这是因为Serenity的核心概念基于BDD开发,并且还使用户能够编写功能强大且丰富的测试报告。

Selenide

Selenide基于Selenium的测试框架,并由Selenium提供技术支持,是一种流行的工具,用于精确和更加直观的UI测试用例。对现代Web技术(如Ajax)进行测试具有一定的复杂性,例如超时、等待和断言等等。WebDriver是用于UI测试的流行工具,但缺少处理超时的功能。Selenide以简单的方式处理所有这些问题。另外,它更容易掌握和学习。只需要做的只是专注于业务逻辑,仅需执行几行简单的代码即可完成您的工作。

Selenide的前提条件是什么?

Selenide的安装非常简单。如果使用的是Maven,则需要在pom.xml文件中添加以下几行。

<dependency>
<groupId>com.codeborne</groupId>
<artifactId>selenide</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>

Selenide的优缺点

在服务器端使用Java的应用程序的前端层中,测试人员面临的最常见问题是超时。您编写的测试用例目前可能工作正常,但是几天后,也许一些Ajax请求将比现在花费更多的时间,或者某些Javascript的运行速度会变慢。另外,您的系统可能同时运行另一个进程,从而导致测试用例失败。更不幸的是,您可能需要花费数天的时间才能找出这些问题的根源。硒化物可以帮助您

  • 简洁的测试用例编写过程消除了超时问题。
  • 支持使用AngularJS开发的应用程序的测试
  • 减少了传统Selenium工具使用的大多数调用函数。

到目前为止,我们还没有发现使用Selenide明显缺点,大概唯一勉强称作缺点的就是语法中各种符号。

下面放一个Demo大家就懂了:

@Test
public void userCanLoginByUsername() {
open("/login");
$(By.name("user.name")).setValue("johny");
$("#submit").click();
$(".loading_progress").should(disappear); // Waits until element disappears
$("#username").shouldHave(text("Hello, Johny!")); // Waits until element gets text
}

网上有人发现这个Demo跑不起来,其实是缺少了必要的初始化步骤,如下:

        Configuration.browser = "Chrome";
Configuration.baseUrl="https://www.baidu.com";

Selenide是最适合您的Java测试框架吗?

对于UI测试,除了Selenide的父框架Selenium WebDriver之外,没有更好的基于Java的框架。显然,WebDriver无法解决由Ajax超时,JavaScript运行缓慢或任何需要花费时间加载的动态内容引起的问题。为了克服问题,我们先前在测试案例中使用了wait_untilsleep方法。使用Selenide,我们不再需要考虑那些问题。仅关注业务逻辑,测试用例就可以很好地实现其目的。

Spock

Spock是一个从JUnit派生的测试自动化框架,用Groovy编写,允许您在JVM(Java虚拟机)上执行DDT(数据驱动测试)。它提供了对JVM支持的所有语言的兼容性。Spock提供的UI与任何其他Java测试框架相比都非常出色。代码的可读性和文档简洁明了,并且可以解释简单的句子,使其成为非常方便的Java测试框架。

Spock作为Java测试框架的优势

Spock的优点:

  • 出色的可读性,提供与普通英语句子的兼容性。
  • Spock使模拟和存根比以往任何时候都容易。而且,两者都是内置的。
  • 参数化更短,更清晰。
  • 提供周围的环境,使查找故障原因更加容易。
  • 富有表现力和简单的DSL(特定于域的语言)。

Spock的缺点:

  • 您需要对Groovy有基本的了解。
  • 如果您不熟悉Spock,则可能会觉得该框架有点不方便,但是一旦精通它,就不会使用其他Java测试框架。
  • 对于其他基于Java的测试框架的高级语法兼容性较差(比如Mockito)

Spock是最适合您的Java测试框架吗?

Spock拥有如此多的优点,相信Spock会成为BDD(行为驱动开发)的最佳Java测试框架,因为它使用简单,直观的UI和强大的DSL。如果碰巧你的项目是基于JVM的应用程序那他绝对是你的不二选择。

下面是之前写过的三篇spock的文章,点击查看详情

总结

在当前的敏捷时代,开发人员还需要参与测试。不必人人都是专家,但是至少应该具备编写自动验证代码的测试用例的基本知识。本文介绍了几种工具,这些工具为应用程序的UI测试,单元测试和BDD测试提供了开发人员的首选。如果真的想在工作表现突出,并希望成为更专业开发人员和测试人员,那么上面提到的工具将对日常工作绝对有所帮助。


技术类文章精选

非技术文章精选

Selenium 4 Java的最佳测试框架的更多相关文章

  1. Selenium 4 Python的最佳测试框架

    随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行.在项目选择最佳框架时,开发人员和测试人员会有些无法下手.做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性 ...

  2. java的mock测试框架

    无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...

  3. Java高并发测试框架JCStress

    前言 如果要研究高并发,一般会借助高并发工具来进行测试.JCStress(Java Concurrency Stress)它是OpenJDK中的一个高并发测试工具,它可以帮助我们研究在高并发场景下JV ...

  4. unittest单元测试,基于java的junit测试框架

    import unittestclass study(unittest.TestCase): def testXia(self): self.assertEqual((3*4),20) def tes ...

  5. Java Junit测试框架

    Java    Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...

  6. Mock测试框架(Mockito为例)

    在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...

  7. Selenium自动化:有代码测试与无代码测试。这些你都懂了吗?

    大多数测试人员认为 Selenium是满足其测试自动化需求的自动化框架.作为全球测试人员使用的开放源框架, Selenium 无疑是测试人员适应日趋敏捷的公司的一种好方法.实际上, Selenium仍 ...

  8. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  9. 5个最佳的Android测试框架(带示例)

    谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM /固件.芯片组以及等等等等,层出不穷.于是乎,对于Android开发人员而言 ...

随机推荐

  1. 【并发编程】ThreadLocal其实很简单

    什么是ThreadLocal ThreadLocal有点类似于Map类型的数据变量.ThreadLocal类型的变量每个线程都有自己的一个副本,某个线程对这个变量的修改不会影响其他线程副本的值.需要注 ...

  2. 哟,来看看JS里面变量声明方式

    点点点点点点进来.点击此处领取双十一梦想大礼包. 终于被我忽悠进来了?老弟,不骚一下你不往里面点是吧,还想大礼包?想着吧. 今天要说的如题,JS里面变量声明方式.可能一提到这个话题大家能很快的打出来, ...

  3. 【Java实践】Kettle从一次实验说起

    一,安装Kettle 1,关于简易安装Kettle 第一次接触kettle(以前只是听过罢了),摸索了几天,在mac源码安装失败,转而快速安装.在mac上安装最新版kettle并成功启动代码如下: ☁ ...

  4. 构建大型 Vue.js 项目的10条建议

    下面是我在开发大型 Vue 项目时的最佳实践.这些技巧将帮助你开发更高效.更易于维护和共享的代码. 今年做自由职业的时候,我有机会开发了一些大型 Vue 应用程序.我所说的这些项目,Vuex stor ...

  5. 每天3分钟操作系统修炼秘籍(13):两个缓冲空间Kernel Buffer和IO Buffer

    两个缓冲空间:kernel buffer和io buffer 先看一张图,稍后将围绕这张图展开描述.图中的fd table.open file table以及两个inode table都可以不用理解, ...

  6. 前端Leader你应该知道的NPM包管理机制

    npm install 命令 首先总结下npm 安装一个模块包的常用命令. /* 模块依赖会写入 dependencies 节点 */ npm install moduleName npm insta ...

  7. Git II: 操作远程Repository基础

    很久之前写过一篇Git: Setup a remote Git repository,留意到有前同事谈论到Git的一些操作,就把Git值得留意的操作补补全吧.这次,主要讲述Git远程Repositor ...

  8. hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)

    I Hate ItTime Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. 领扣(LeetCode)回文链表 个人题解

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶:你能否用 O(n) 时间复杂 ...

  10. VS Code 之 Jupyter NoteBook 初试

    一.前言 在今年九月的 PyCon China 大会上,官宣了一项 VS Code Python 的全新功能:Visual Studio Code Python 插件将提供 Jupyter Noteb ...