当前位置: 首页 > news >正文

Maven+Junit5 + Allure +Jenkins 搭建 UI 自动化测试实战

文章目录

      • 效果展示
      • Junit 5
        • Junit 5 介绍
        • Junit 5 与 Junit 4 对比
      • PageFactory 模式编写自动化代码
      • 公共方法提取
      • 测试用例参数化
      • Jenkins 搭建及配置
        • 参数化执行
      • 生成 Allure 报告
      • Maven 常用命令介绍
      • POM 文件

效果展示

本 chat 介绍 UI 自动化测试框架的搭建: 运用 page factory 模式实现页面元素获取与业务操作分离;所用的测试框架为 junit5,并用其参数化测试用例;利用 maven profile 实现环境切换;利用 jenkins 实现持续集成并生成漂亮的 allure 报告。下面先给大家看下步骤。

  1. 在 jenkins 中点击【build with paremters】,选择环境

环境是自定义的,可以根据需要设定更多的环境(图没了,在网上搜的其他图,将就看看):
在这里插入图片描述在这里插入图片描述

  1. 选择 test,点击【build】,开始在测试环境运行测试用例(选择 Online 则在生产环境运行测试用例)

  2. 运行后查看 allure 测试报告

可以看到测试步骤及输入的参数,还可以看到页面截图,下面介绍下是怎么实现的。

(抱歉,图没了,之前文章写在gitchat上,图片忘了备份)

Junit 5

Junit 5 介绍

JUnit 5 是 java 程序中应用最广泛的测试框架,很长一段时间以来,JUnit 一直在完美地完成它的工作,其间,JDK 8 带来了 java 中非常令人兴奋的特性,尤其是 lambda 表达式。JUnit5 的目标是适应 Java8 的编码风格和其他一些特性,这就是为什么需要 Java8 在 JUnit5 中创建和执行测试(尽管为了向后兼容,可以执行用 JUnit3 或 JUnit4 编写的测试)。

与 JUnit 4 相比,JUnit 5 由来自三个不同子项目的几个不同模块组成:

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit Platform 定义了 test engine API,用于开发在平台上运行新测试框架,结构如下:

在这里插入图片描述

如何标记测试用例

Junit 5 标记测试用例用 @Test:

	@Testpublic void login() throws InterruptedException, IOException {common = PageFactory.initElements(threadDriver.get(), Common.class);common.login("aaa", "111111");}

引入:org.junit.jupiter.api.Test

  1. JUnit Jupiter:包含所有注解,有 TestEngine 实现来运行用这些注解编写的测试用例,结构如下:

img

  1. JUnit Vintage

用 JUnit 3 和 JUnit 4 写的测试用例可以在 JUnit 5 Platform 上运行。

Junit 5 与 Junit 4 对比

JDK

Junit 4Junit 5
需要 Java 5 或以上版本需要 Java 8 或以上版本

注解

说明Junit 4Junit 5
定义测试方法即用例@Test@Test
在当前类中的所有测试方法之前执行@BeforeClass@BeforeAll
在当前类中的所有测试方法之后执行@AfterClass@AfterAll
在每个测试用例前执行@Before@BeforeEach
在每个测试用例后执行@After@AfterEach
禁用测试方法或类@Ignore@Disabled
Tagging 和 filtering@Category@Tag

测试套件

Junit 4 用 @RunWith 和 @Suite 注解来实现测试套件:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;@RunWith(Suite.class)
@Suite.SuiteClasses({ExceptionTest.class, TimeoutTest.class
})
public class JUnit4Example 
{
}

Junit 5 用 @RunWith、@SelectPackages 和 @SelectClasses 来实现测试套件,如下:

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.runner.RunWith;@RunWith(JUnitPlatform.class)
@SelectPackages("junit5.examples")
@SelectClasses({LoginTest.class, SearchTest.class, ResourcePathTest.class})
public class JUnit5Example 
{
}

注意:测试用例类必须以 Test 开头或结尾,否则按测试套件跑的时候会略过不跑该类里面的测试用例(识别不出来)。

断言

  • Junit 4:org.junit.Assert
  • Junit 5:org.junit.jupiter.Assertions

还有其他的一些差别,就不再一一列举。

PageFactory 模式编写自动化代码

最原始的模式大家都知道,就是打开页面 -> 查找元素 -> 操作 -> 等待加载完成 -> 验证,这样一步一步往下走,没有分层的概念。页面元素与逻辑代码混在一起,不利于维护和重用:

String url = "xxx";
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
driver = new ChromeDriver(chromeOptions);
driver.manage().window().maximize();
driver.get(url);// 以下代码查找页面元素与业务操作混在了一起
driver.findElement(By.id("xx")).sendKeys("xx");
driver.findElement(By.id("xx")).click();

如何将元素定位与操作分离呢,利用 PageFactory,每个页面的元素定位封闭成一个类,操作封装成另一个类,页面元素类 LoginPage.java(只列出关键代码):

  package pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class LoginPage {/**********************************以下为登录页面元素***********************************/// 用户名输入框@FindBy(xpath="//form[@class='el-form ruleForm']/div[1]//input")public WebElement inputUserName;// 密码输入框@FindBy(xpath="//input[@type='password']")public WebElement inputUserPwd;// 验证码输入框@FindBy(xpath="//form[@class=\\'el-form ruleForm\\']/div[3]//input")public WebElement inputCode;// 登录按钮@FindBy(xpath = "//button[@class='el-button loginbtn el-button--primary']")public WebElement btnSubmit;// 搜索框@FindBy(id="search")public  WebElement inputSearch;}

相关文章:

Maven+Junit5 + Allure +Jenkins 搭建 UI 自动化测试实战

文章目录 效果展示Junit 5Junit 5 介绍Junit 5 与 Junit 4 对比PageFactory 模式编写自动化代码公共方法提取测试用例参数化Jenkins 搭建及配置参数化执行生成 Allure 报告Maven 常用命令介绍POM 文件效果展示 本 chat 介绍 UI 自动化测试框架的搭建: 运用 page factory 模式…...

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四:创建使用nfs共享目录的卷 五:创建容器使用nfs-web-1卷 六:测试访问 七:是否同步测试 什么是NFS NFS 服务器:ne…...

super关键字

super关键字 在Java中,super是一个关键字,它用于引用当前对象的父类。在继承的关系中,子类可以通过super关键字来调用父类的构造方法、成员方法和成员变量。 super关键字的主要用途 调用父类的构造方法: 在子类的构造方法中&…...

【经典算法】LeetCode 200. 岛屿数量(Java/C/Python3/Go实现含注释说明,中等)

目录 题目描述思路及实现方式一:深度优先搜索(DFS)思路代码实现Java版本C语言版本Python3版本Golang版本 复杂度分析 方式二: 使用广度优先搜索(BFS)思路代码实现Java实现C实现Python3实现Go实现 总结相似题…...

Hive SQL-DQL-Select查询语句用法详解

HQL Select用法详解 1.基础语法 (1)select_exp (2)ALL、DISTINCT (3)WHERE (4)分区查询、分区裁剪 (5)GROUP BY (6)HAVING &#xff0…...

沙盘Sandboxie v5.56.4

菜鸟高手裸奔工具沙盘Sandboxie是一款国外著名的系统安全工具,它可以让选定程序在安全的隔离环境下运行, 只要在此环境中运行的软件,浏览器或注册表信息等都可以完整的进行清空,不留一点痕迹。同时可以防御些 带有木马或者病毒的…...

Arcpy开发记录

一.GDB数据库相关 1.单独的shape更新时,不会有限制,数据会自动截取 2.在GDB下,使用UpdateCursor更新字段时,填入的数据长度必须与字段长度要求一致,否则报错: 二.Cursor相关 嵌套使用cursor时&#xff0c…...

Android使用itextpdf操作PDF文档

1、导入jar包: itext-asian.jaritextpdf-5.5.8.jar Paragraph 和 Phrase 的区别: 在 iTextPDF 库中,Paragraph 和 Phrase 是用于创建和组织文本内容的两个不同的类。 Paragraph(段落): Paragraph 是一个…...

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 已开源:https://github.com/stay-leave/enhance_llm 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。…...

什么是限流?常见的限流算法

目录 1. 什么是限流 2. 常见限流算法 3. 固定窗口算法 4. 滑动窗口算法 5. 漏桶算法 6. 令牌桶算法 7. 限流算法选择 1. 什么是限流 限流(Rate Limiting)是一种应用程序或系统资源管理的策略,用于控制对某个服务、接口或功能的访问速…...

ZL-0895小动物活动记录仪可同时检测8只动物的活动量

简单介绍: 小动物活动记录仪是一种多用途、宽范围的小动物活动记录仪器,可用于小鼠、大鼠、豚鼠和兔的实验,小动物活动记录仪​具有不需对动物使用特别盛具的特点,可在不改变动物原生活环境的情况下,进行实时监测&…...

注册测绘师的前世今生

本文梳理了 注册测绘师 的前世今生,具体情况如下表: 历史线时间事件诞生2007年1月原人事部、国家测绘局联合印发《注册测绘师制度暂行规定》,注册测绘师制度建立。同时同步发布《注册测绘师资格考试实施办法》、《注册测绘师资格考核认定办法…...

Python中的异常处理:深入探索try-except-finally结构

Python中的异常处理:深入探索try-except-finally结构 一、引言 在Python编程中,异常处理是一个非常重要的部分。当程序遇到错误时,比如尝试除以零、文件读取失败等,Python会抛出一个异常。如果我们不捕获这些异常,程…...

【R语言】边缘概率密度图

边缘概率密度图是一种在多变量数据分析中常用的图形工具,用于显示每个单独变量的概率密度估计。它通常用于散点图的边缘,以便更好地理解单个变量的分布情况,同时保留了散点图的相关性信息。 在边缘概率密度图中,每个变量的概率密度…...

中国结(科普)

中国结是一种手工编织工艺品,它身上所显示的情致与智慧正是汉族古老文明中的一个侧面。 [1]它原本是由旧石器时代的缝衣打结,后推展至汉朝的仪礼记事,再演变成今日的装饰手艺。周朝人随身的佩戴玉常以中国结为装饰,而战国时代的铜…...

使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大,大致有frameworka层源码,硬件层(HAL)源码,内…...

区块链 | IPFS:CID

🦊原文:Anatomy of a CID 🦊写在前面:本文属于搬运博客,自己留存学习。 1 CID 在分布式网络中与其他节点交换数据时,我们依赖于内容寻址(而不是中心化网络的位置寻址)来安全地定位…...

PostgreSQL(十二)报错:Tried to send an out-of-range integer as a 2-byte value: 51000

目录 一、报错场景二、源码分析三、实际原因(更加复杂)四、解决思路 一、报错场景 今天写了一个历史数据处理程序,在开发环境、测试环境都可以正常执行,但是放到生产环境上就不行,报了一个这样的错误: or…...

Linux守护进程

进程组和会话在 UNIX 系统中是非常重要的概念,特别是在进行作业控制和终端会话管理时。下面是关于进程组和会话的详细解释: 进程组(Process Group) 定义与作用: 进程组是一个或多个进程的集合,这些进程通常…...

HarmonyOS 应用开发——入门

首先当然是华为的官方文档了,要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看,可以看我下面总结的干货,哈哈 第一个问题:stage架构和fa架构的区…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...