Selenium 4 Java的最佳测试框架
几十年来,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_until
或sleep
方法。使用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测试提供了开发人员的首选。如果真的想在工作表现突出,并希望成为更专业开发人员和测试人员,那么上面提到的工具将对日常工作绝对有所帮助。
- 郑重声明:文章禁止第三方(腾讯云除外)转载、发表,事情原委测试窝,首页抄我七篇原创还拉黑,你们的良心不会痛吗?
技术类文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架第二版
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 将swagger文档自动变成测试代码
- 五行代码构建静态博客
- 基于java的直线型接口测试框架初探
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 成为优秀自动化测试工程师的7个步骤
- 成为自动化测试的7种技能
- 自动化测试生命周期
- 如何在DevOps引入自动化测试
- Web端自动化测试失败原因汇总
- 如何在DevOps引入自动化测试
- 测试人员如何成为变革的推动者
- 编写测试用例的技巧
Selenium 4 Java的最佳测试框架的更多相关文章
- Selenium 4 Python的最佳测试框架
随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行.在项目选择最佳框架时,开发人员和测试人员会有些无法下手.做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性 ...
- java的mock测试框架
无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...
- Java高并发测试框架JCStress
前言 如果要研究高并发,一般会借助高并发工具来进行测试.JCStress(Java Concurrency Stress)它是OpenJDK中的一个高并发测试工具,它可以帮助我们研究在高并发场景下JV ...
- unittest单元测试,基于java的junit测试框架
import unittestclass study(unittest.TestCase): def testXia(self): self.assertEqual((3*4),20) def tes ...
- Java Junit测试框架
Java Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...
- Mock测试框架(Mockito为例)
在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比 ...
- Selenium自动化:有代码测试与无代码测试。这些你都懂了吗?
大多数测试人员认为 Selenium是满足其测试自动化需求的自动化框架.作为全球测试人员使用的开放源框架, Selenium 无疑是测试人员适应日趋敏捷的公司的一种好方法.实际上, Selenium仍 ...
- Selenium关键字驱动测试框架Demo(Java版)
Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html
- 5个最佳的Android测试框架(带示例)
谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM /固件.芯片组以及等等等等,层出不穷.于是乎,对于Android开发人员而言 ...
随机推荐
- NOIP模(ka)拟(chang)测试30 考试报告
应得分:300 实得分:210 毒瘤卡常出题人,卡掉90分! T1 Return 开个副本数组sort一下,unique去重就可以啦.时间复杂度$ O(nlog2(n)) $ T2 One 其实就是约 ...
- vue中组件的data为什么是一个函数
1. 前言 在学习vue的时候,一直纳闷一件事:组件的data数据为什么必须要以函数返回的形式,为什么不是简单的对象形式呢?遂带着问题去翻官方文档,文档中自然也写明了这么做的原因,本篇博文以官方文档给 ...
- LCD 调试总结
(1) 液晶显示模式 并行:MCU接口.RGB接口.Vysnc接口 串行:SPI接口.MDDI接口 (2) 屏幕颜色 实质上即为色阶的概念.色阶是表示手机液晶显示屏亮度强弱的指数标准,也就是通常所说的 ...
- jquery each循环遍历完再执行的方法
jquery each循环遍历完再执行的方法 因为each是异步的 所以要加计数器. var eachcount=0; <pre> $(".emptytip").eac ...
- tomcat的catalina.out日志切割
目前我们的日志文件catalina.out累积后非常大,部分应用的catalina.out达到几十G并且还在持续增长. 日志文件太大不便于阅读和排查问题.业务增长不断增长,日志也在不断增加,为了以后便 ...
- 本地通知-UILocalNotification
第一步:创建本地推送 本地通知 UILocalNotification // 创建⼀一个本地推送 UILocalNotification * notification = [[UILocalNotif ...
- 创建和销毁对象——用私有构造器或者枚举类型强化Singleton属性
参考资料:<Effective Java>.<Java核心技术 卷1>.https://www.cnblogs.com/zhaosq/p/10135362.html 基础回顾 ...
- 服务器上传文件到oss,以及备份
公司的前端js,css是发布到oss的,所以要求后台在发布的同时先把即将要覆盖的文件备份到服务器上 步骤是先上传文件到服务器,服务器上传到oss服务器之前先备份相同文件名的文件 public clas ...
- 第一篇: openJDK源码编译安装--mac版本
1.为什么要编译JDK 想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理,虽然门槛高一点,但肯定比阅读各种书籍,文章,博客 ...
- 记录一次在Github写博客时的报错和解决方法
前几天刚刚搭建好了Github博客,打算用作记录Go语言学习笔记.由于在此前我没有使用过markdown语法写过博客,所以跟着文档了解了格式就想试试, 发表第一篇博客.markdown编辑器我用的是T ...