Selenium 中的 JUnit 注解

JUnit 是一个基于 Java 的开源框架,可帮助测试人员执行单元测试。JUnit 主要用于测试应用程序的每个单元或组件,例如类和方法。它有助于编写和运行可重复的自动化测试,以确保项目代码按预期运行。还可以使用 JUnit 执行 Selenium 自动化测试用例,以测试 Web 应用程序或网站。

JUnit 是一个基于 Java 的开源框架,可帮助测试人员执行单元测试。JUnit 主要用于测试应用程序的每个单元或组件,例如类和方法。它有助于编写和运行可重复的自动化测试,以确保项目代码按预期运行。还可以使用 JUnit 执行 Selenium 自动化测试用例,以测试 Web 应用程序或网站。

在我们开始讨论 Selenium 中的 JUnit 注解之前,让我们快速回顾一下 JUnit 在测试人员社区中流行的原因。

为什么 JUnit 在测试人员中如此受欢迎

毫无疑问,JUnit 被认为是顶级 Java 测试框架之一。以下是JUnit 之所以流行的主要原因:

  • 开源框架
  • 提供与 Eclipse、IntelliJ 等 IDE 的集成,可以快速地测试运行代码。
  • 提供与 Jenkins、Teamcity 等 CI/CD 工具的集成,以帮助创建稳定的交付管道。
  • 提供丰富的断言能力以帮助验证结果是否为预期。
  • 提供多种注解以帮助您识别测试方法的类型。
  • 提供创建测试套件的工具,该套件还包括多个测试用例甚至其他测试套件。
  • 提供 Test Runner 来轻松执行测试套件。
  • 使测试代码更易读、更优雅并提高质量。
  • 提供 HTML 格式的 JUnit 测试报告生成。

什么是 JUnit 注解

正如上面的论述,Selenium 中的 JUnit Annotations 有助于识别我们在测试代码中定义的方法类型。为了使用 JUnit 执行 Selenium WebDriver 测试,有必要在脚本中添加 JUnit Annotations。

以下是Selenium 中常见的 JUnit 注解列表:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • @Ignore

Selenium 中用于特定目的的 JUnit 注解列表:

  • @ParameterizedTest
  • @RunWith
  • @RepeatedTest
  • @Parameters

此 JUnit 认证为那些希望通过 JUnit 推进 Selenium 自动化测试事业的人建立了测试标准。

Selenium 中的 JUnit 注解

@BeforeClass

此注解用于初始化我们在运行测试用例中使用的对象。当我们在 BeforeClass 方法中初始化任何对象时,它只会被调用一次。

@BeforeClasspublic static void SetUpClass(){System.out.println("This is @BeforeClass annotation");}

@Before

当我们想在使用该方法时初始化任何对象时,都会使用此注解。假设我们有 5 个测试用例,Before 方法将在每个测试方法之前被调用,总计调用 5 次。因此,每次执行测试用例时都会调用它。此注解通常用于设置测试环境。

@Beforepublic void SetUp(){   System.out.println("This is @Before annotation");}

@Test

该注解告诉 JUnit,它所附加的 public void method() 可以作为测试用例运行。此注解包括要测试的应用程序的测试方法。单个自动化测试脚本中可能包含许多测试方法。

@Testpublic void Addition(){   c= a+b;assertEquals(15,c);System.out.println("This is first @Test annotation method= " +c);}@Testpublic void Multiplication(){   c=a*b;assertEquals(50,c);System.out.println("This is second @Test annotation method= " +c);}

@After

无论我们在 @Before 注解方法中初始化了什么对象、资源,该初始化都应该在 @After 注解方法中释放。因此,每次测试方法之后都会执行此注解。@After 注解的主要目的是删除临时数据的过程。Teardown在这里插入代码片 方法也可用于定义默认值或清除测试环境。

@Afterpublic void TearDown(){c= null;System.out.println("This is @After annotation");}

@AfterClass

无论我们在 @BeforeClass 注解方法中初始化了什么,该初始化都应该在 @AfterClass 注解方法中释放。所以,这个注解只执行一次,它会在所有测试执行完毕后执行。

@AfterClasspublic static void TearDownClass(){System.out.println("This is @AfterClass annotation");}

@Ignore

这个注解告诉 JUnit 这个方法不应该被执行。在特定测试用例中我们的代码模块没有准备好的场景中,我们可以暂时将该代码模块放在 @Ignore 注解方法中以避免测试用例失败。JUnit 4 提供了强大的报告功能来帮助您了解被忽略的测试计数以及运行的测试计数和失败的测试计数。

@Ignorepublic void IgnoreMessage(){String info = "JUnit Annotation Blog" ;assertEquals(info,"JUnit Annotation Blog");System.out.println("This is @Ignore annotation");}

下面是一个案例,包含了以上所有注解:

package JUnitAnnotationBlog;import static org.junit.Assert.assertEquals;import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;public class JUnitAnnotations {int a=10;int b=5;Object c;@BeforeClasspublic static void SetUpClass(){System.out.println("This is @BeforeClass annotation");}@Beforepublic void SetUp(){   System.out.println("This is @Before annotation");}@Testpublic void Addition(){   c= a+b;assertEquals(15,c);System.out.println("This is first @Test annotation method= " +c);}@Testpublic void Multiplication(){   c=a*b;assertEquals(50,c);System.out.println("This is second @Test annotation method= " +c);}@Afterpublic void TearDown(){c= null;System.out.println("This is @After annotation");}@AfterClasspublic static void TearDownClass(){System.out.println("This is @AfterClass annotation");}@Ignorepublic void IgnoreMessage(){String info = "JUnit Annotation Blog" ;assertEquals(info,"JUnit Annotation Blog");System.out.println("This is @Ignore annotation");}}  

JUnit 注解的执行顺序

JUnit Annotations 的基本流程图,可帮助理解测试流程。

图片

Junit注解流程图

JUnit 中用于特定目的的注解

在前面的部分中,我们介绍了 Selenium 中最基本的 JUnit 注解。现在分享一些高级 JUnit 注解及其特定用途。

@ParameterizedTest

这个注解有点类似于@Test注解,不同的是它是用来标识参数化的测试方法。我们还可以使用@ValueSource注解在注解测试方法后提供方法参数。参数的数据类型可以是任何类型,例如字符串或整数。在下面的示例代码中,作为参数传递的 String 类型的变量data从源注解中获取一个参数。

此注解的主要目的是使用不同的参数多次运行测试。

注意:在使用这些注解之前添加以下库

org.junit.jupiter.params.ParameterizedTest
org.junit.jupiter.params.provider.ValueSource

例子:

@ParameterizedTest@ValueSource(strings = {"LambdaTest", "JUnit", "Annotations", "Blog"})void ExampleCode(String data){assertNotNull(data);}

@RepeatedTest

JUnit 5 中引入的这个注解用于根据需要多次运行测试方法。测试进行的重复次数可以作为参数传递给 @RepeatedTest 注解。

例子:

@Test
@RepeatedTest(5)
public void Addition()
{   int a=10;int b=5;Object c; c= a+b;assertEquals(15,c);System.out.println("This is @RepeatedTest annotation method= " +c);
}

@RunWith

当一个类被 @RunWith 注解时,JUnit 调用被注解的类来执行测试。这个注解基本上与 @SuiteClasses 注解一起运行,它指定了一组要执行的许多类。套件中的每个类在执行之前运行的类之后执行。

例子:

@RunWith(Suite.class)               
@Suite.SuiteClasses({               TestSample1.class,TestSample2.class,TestSample3.class,TestSample4.class,TestSample5.class,  
})      public class JunitTest {                }

@Parameters

注意:不要混淆@ParameterizedTest注解和@Parameters注解。@Parameters 注解需要 @RunWith 注解来指定测试将使用参数化运行器运行。而在 @ParameterizedTest 注解中,@ValueSource 将用作传递参数的源注解。

在使用 @Parameters 注解时,我们使用 @RunWith 注解来指定测试将使用 Parameterized Runner 运行。运行程序寻找初始化测试的方法,为测试提供值并执行测试。在下面的代码中,值集定义为使用 @Parameters 注解的列表对象数组。参数化测试是一种常见的测试,它使用测试参数一次又一次地执行。这为开发人员使用不同的输入类型执行相同的测试节省了大量时间。

@RunWith(Parameterized.class)
public class Blog1 {String name, password;@Parameterspublic Object[][] getData(){Object[][] info = {{"ramit1","ramitd11"}, {"ramit2","ramitd22"}};return info;}public Blog1(String id, String pass){this.name = id;this.password= pass;}@Testpublic void Sample(){SampleCode.login(name, password);}
}

以下是上述示例中使用的SampleCode类的代码:

public class SampleCode
{public static void login(String name, String password){System.out.println(“Login credentials are ”  + name + password ) ;}
}

Selenium 中与 JUnit 注解组合使用的属性

JUnit 中的这些测试注解具有多个可用于我们的测试方法的属性:

timeout

为每个测试用例指定超时,在@Test注解中指定timeout属性。超时时间以毫秒为单位指定。

@Test(timeout=10000)
public void ExampleCode() throws InterruptedException
{System.setProperty("webdriver.chrome.driver","chromedriver.exe");WebDriver driver = new ChromeDriver();driver.get("https://www.****.com");driver.manage().window().maximize();***省略步骤细节***Thread.sleep(2000);  //Passworddriver.quit();
}

如果您想为多个测试用例设置相同的超时时间,则无需在脚本中指定的每个 @Test 注解中添加超时属性。在这种情况下可以使用 @Rule 注解来定义适用于脚本的每个 @Test 方法注解的全局超时。

例子:

@Rule
public Timeout globalTimeout = Timeout.seconds(10); //设置 10s 的全局超时

expected

这是 JUnit 4 引入的一个特殊功能,它提供了跟踪执行特定代码时预期的异常的工具。运行代码时可能会出现不同类型的异常,例如 NoSuchMethodException、ArithmeticException、IndexOutOfBoundsExceptions 等。例如,当特定数字除以零时,您希望代码发生异常,在这种情况下,需要将使用 ArithmeticException。如果没有发生异常异常,则测试执行将失败。

例子:

@Test(expected= ArithmeticException.class)
public void ExampleCode() {int a= 10,b=0,c;c=a/b;System.out.println("Value= " +c);
}

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ESP32】打造全网最强esp-idf基础教程——16.SmartConfig一键配网

SmartConfig一键配网 一、SmartConfig知识扫盲 在讲STA课程的时候,我们用的是代码里面固定的SSID和密码去连接热点,但实际应用中不可能这么弄,我们得有办法把家里的WiFi SSID和密码输入到设备里面去,对于带屏带输入设备还…

C# —— Directory类

Directory 提供了目录以及子目录进行创建移动和列举的操作方法 Directory 和DirectoryInfo类 (主要操作文件目录属性列如文件是否隐藏的 或者只读等这些属性) 1目录的创建方法Directory 在桌面上查找该目录 Directory.CreateDirectory("C:\Users…

视频共享交换平台LntonCVS视频监控平台智慧加油站安全管理方案

加油站作为危化品行业的一部分,日常的加油和卸油作业安全至关重要。目前国内加油站的管理主要依赖于人为管控、监控摄像头和人工巡检,这些方法存在效率低下和反应滞后的问题。为了有效应对安全风险,急需引入人工智能、物联网和大数据技术&…

UE5 本地化多语言方案

导入插件: https://www.unrealengine.com/marketplace/zh-CN/product/07e1d9bd9ced444c9b2a7e232161f74d​www.unrealengine.com/marketplace/zh-CN/product/07e1d9bd9ced444c9b2a7e232161f74d 打开测试关卡 打开插件下图目录,csv文件可以添加多个&…

[PaddlePaddle飞桨] PaddleOCR图像小模型部署

PaddleOCR的GitHub项目地址 推荐环境: PaddlePaddle > 2.1.2 Python > 3.7 CUDA > 10.1 CUDNN > 7.6pip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr2.7…

网络编程:各协议头(数据报格式)

一、mac头 二、ip头 protocol——tcp/udp (7)TTL——生存时间 三、tcp头 四、udp头

dify/api/models/web.py文件中的数据表

源码位置:dify/api/models/web.py SavedMessage 表结构 字段英文名数据类型字段中文名字备注idStringUUIDIDUUID生成app_idStringUUID应用ID非空message_idStringUUID消息ID非空created_by_roleString创建者角色非空,默认值为’end_user’created_bySt…

uboot学习:(一)

目录 uboot是一个裸机程序(bootloader) 作用 要运行linux系统时,如何从外置的flash拷贝到DDR中,才能启动 uboot使用步骤 步骤1中的命令例子 注意 uboot源码获取方法 uboot是一个裸机程序(bootloader&#xff09…

校园外卖系统带万字文档在线外卖管理系统java项目java课程设计java毕业设计

文章目录 校园外卖系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档(9.9¥带走) 校园外卖系统 一、项目演示 校园外卖服务系统 二、项目介绍 语言:java 数据库&…

【fastadmin 开发实战】select 级联选择

先看实现的效果 1、表单页面实现级联选择 2、级联选项后台可以编辑添加 前端代码&#xff08;编辑窗口&#xff09;&#xff1a; <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(渠道归属)}:</label><…

力扣之有序链表去重

删除链表中的重复元素&#xff0c;重复元素保留一个 p1 p2 1 -> 1 -> 2 -> 3 -> 3 -> null p1.val p2.val 那么删除 p2&#xff0c;注意 p1 此时保持不变 p1 p2 1 -> 2 -> 3 -> 3 -> null p1.val ! p2.val 那么 p1&#xff0c;p2 向后移动 p1 …

Postman API测试覆盖率:全面评估指南

&#x1f4ca; Postman API测试覆盖率&#xff1a;全面评估指南 在API测试中&#xff0c;测试覆盖率是一个关键指标&#xff0c;它衡量了测试用例对代码的覆盖程度。Postman提供了多种工具和方法来评估API测试覆盖率&#xff0c;帮助开发者和测试人员确保API的质量和稳定性。本…

力扣 双指针基础

class Solution {public void moveZeroes(int[] nums) {int l 0;//慢指针但先走for (int r 0; r < nums.length; r) {//快指针&#xff0c;遍历次数if (nums[r] 0) continue;//l比r先到&#xff0c;在此处定住l&#xff0c;r继续移动int t nums[l];nums[l] nums[r];num…

关于力扣150题目——逆波兰表达式求值Java实现的三种解法

题目介绍 逆波兰表达式是一种后缀表达式&#xff0c;其运算符位于操作数之后。力扣150题目要求我们实现一个函数&#xff0c;计算给定逆波兰表达式的值。本文将介绍三种不同的Java实现方法来解决这个问题。 解法一&#xff1a;使用栈 这是最直观和常见的解法&#xff0c;使用…

33、PHP求1+2+3+...+n、php 实现不用加减乘除做加法

题目&#xff1a;PHP 求123…n 描述&#xff1a; 求123…n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 <?phpfunction Sum_Solution($n) {$sum 0;$n > 0 && $sum$nSum_Sol…

防火墙基础实验配置

一&#xff0c;实验拓扑 二&#xff0c;实验需求&#xff1a; 1.DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问 2.生产区不允许访问互联网&#xff0c;办公区…

外贸展示型网站设计

清洁能源风能设备wordpress外贸公司模板 风能设备wordpress外贸公司模板&#xff0c;做新能源网通设备的公司网站模板。 https://www.jianzhanpress.com/?p3606 钢材wordpress外贸公司模板 金属钢材wordpress外贸公司模板&#xff0c;做金属成品贸易公司的企业网站模板。 …

高项-法律法规与规范知识点

1、招标有公开招标、邀请招标和议标等。 2、国有资金占控股或者主导地位的依法必须进行招标的项目&#xff0c;应当公开招标&#xff1b; 下列情形可以邀请招标&#xff1a; (1) 需要采用不可替代的专利或者专有技术&#xff1b; (2) 采购人依法能够自行建设、生产或者提供&…

金九银十招聘季, 自动化测试面试题分享

马上进入金九银十&#xff0c;很多小伙伴有被动跳槽的打算&#xff0c;所以更新一些相关的自动化面试题&#xff0c;希望能帮到大家。 一 怎么设计接口测试用例&#xff1f; 通常&#xff0c;设计接口测试用例需要考虑以下几个方面&#xff1a; ① 是否满足前提条件 有些接…

面试经典题

找出字符串中第一个匹配项的下标 class Solution { public:vector<int> getNextArray(string needle){int n needle.size();if(n 1){return {-1};}else if(n 2){return {-1, 0};}vector<int> res(n);res[0] -1;res[1] 0;int cnt 0;int i 2;while(i < n)…