IWeb4j 项目解决web自动化回归测试痛点!
IWeb4j 项目思想
- IWeb项目的测试用例使用数据驱动测试,当下数据驱动使用最多的无非是excel、yaml、json、数据库(后续通过SpringDataJPA实现数据库驱动)作为数据驱动的载体,四种方式思想都一样只是实现方式不同。
目前先实现excel数据源驱动。通过开源的Easypoi文档导入导出工具完成,后续会新增数据库、yaml文件的数据驱动方式。 - 页面元素定位使用封装的关键字库测试,通过dom4j解析xml方式实现。
- 整体项目属于混合模型开发测试,整体只用显示等待解决元素加载可见可编辑问题
项目主要技术
该项目主要技术
技术 | 用途 | 备注 |
---|---|---|
springboot | 后端项目框架 | 后期可扩展平台 |
lombok | java实用工具 | 通过注解减少代码量 |
testNG | 测试用例执行套件 | 控制测试流程 |
allure | 魅力的测试报告工具 | 测试报告 |
Easypoi | 文档的导入导出工具 | 数据驱动,读写excel测试用例 |
dom4j | xml的dom树解析工具 | 元素关键字的实现载体 |
log4j2 | 日志工具 | 记录系统日志 |
selenium | 通过WebDriver API 操作页面 | 模拟真实用户操作 |
... | ... | ... |
IWeb4j 各包目录结构说明
项目使用流程
- 配置文件的加载
IWeb4j项目使用yaml配置文件
eg:页面关键字维护的页面元素xml文件通过yaml配置文件路径
然后通过yaml的key注入配置文件路径
excel测试用例读写通过Easypoi实现
excel维护测试用例也是一种很常见的方式,和常用的功能测试用例几乎没有差别,只是对excel的表头进行数据映射处理。如下:页面元素关键定位通过dom4j解析xml的dom树实现元素定位
维护的页面元素关键字也是通过映射成数据对象进行获取
- 测试用例维护
- 映射成dto数据的对象
通过Easypoi封装的工具类拿到一个集合,然后遍历集合进行读取excel用例进行测试
整个项目的页面关键字工具类UIElementUtil异常捕获中加入allure的截图功能
这样在元素定位失败或者超时异常后都可以捕获异常并截图至allure报告中。测试完成后会在项目下更新allure-results文件夹,然后通过allure命令即可访问测试报告(如果想集成jenkins网上有很多教程很简单),allure-results的注解使用点击查看
效果如下:
IWeb4j 项目解决web自动化的痛点
- 对于web自动化项目来说痛点在于:元素加载不稳定,自动化运行不稳定、测试数据的后期维护力度大等因素让很多人不愿意去做web端的自动化测试。但是如果解决好上面的情况,web自动化的痛点自然就得到了解决。而IWeb4j 项目只使用显示等待来解决元素加载问题,页面元素通过关键字定位更易于理解,测试用例使用excel管理更易于上手,自动化运行中使用allure截图来捕获异常作为证据的查看更直观。
IWeb4j 更改测试数据及维护说明
- 页面元素定位数据维护(web自动化测试建议使用css定位效率更高)
页面元素维护通过维护xml文件来解决,如图:
- 测试用例维护通过excel来维护,如图:
- 需要通过easypoi来获取excel的数据源,然后通过封装UIElementUtil工具类的sendInput()/clickPop()/clickButton()...等方法的调用来完成元素的操作。
public void loginCase() {
UIElementUtil.clickButton("百度登录","点击右上角登录按钮",driver);
UIElementUtil.clickButton("百度登录","点击账号密码登录按钮",driver);
String loginDatasPath = "src/main/resources/pagesxml/baidulogin.xls";
List<EasyPoiDatas> loginDatas = EasyPoiUtil.importExcel(loginDatasPath,1,1, EasyPoiDatas.class);
//过滤Easypoi读取表格多出两行为空的数据
List<EasyPoiDatas> loginDatasNotEmPty = loginDatas.stream().filter(loginData -> loginData.getName() != null || loginData.getDesc() != null || loginData.getFlag() != null || loginData.getPwd() != null).collect(Collectors.toList());
//新的集合存放新的测试数据和测试结果
List<EasyPoiDatas> collectS = new ArrayList<>();
for (EasyPoiDatas loginData :loginDatasNotEmPty ) {
try {
//由于EasyPoiUtil工具类对于空表格返回为null,sendKeys方法源码中不允许为null或0,这做下转换
UIElementUtil.sendInput("百度登录","登录账号",driver,loginData.getName()==null? "" : loginData.getName());
UIElementUtil.sendInput("百度登录","登录密码",driver,loginData.getPwd()==null? "" : loginData.getPwd());
UIElementUtil.clickButton("百度登录","登录按钮",driver);
String getResponseTip = driver.findElement(AccountData.TIPS).getText();
loginData.setActual(getResponseTip);
WebElement element = UIElementUtil.getElementByKeyword("百度登录","登录按钮",driver);
AssertWebUtil.textToBePresentInElement(element,"期望结果",driver);
} catch (Exception e) {
e.printStackTrace();
}
collectS.add(loginData);
}
if (collectS.size() == 0){
System.out.println("测试用例无数据,请查看");
}else {
//3.将所有实际获取结果写入实际结果中
EasyPoiUtil.exportExcel(collectS,"测试用例集","登录用例", EasyPoiDatas.class,loginDatasPath, true);
}
}
- 如果想使用该项目请访问github源码地址,好用的话记得给个star
)
更多测试技术分享、学习资源以及一些其他福利可关注公众号:【Coding测试】获取:
IWeb4j 项目解决web自动化回归测试痛点!的更多相关文章
- UI自动化的痛点
解决UI自动化难点痛点: 解决从安装过程中跳出的提示框以及操作过程中任意提示框的操作,来提高用例成功率: 公用用例及业务用例分离,便于维护和多人使用,提高脚本编写效率: 解决用android wind ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目实战环境准备
Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG 1.1 安装TestNG 1.2 添加TestNG类库2 部署Maven 2.1 mav ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- Selenium Web 自动化 - 项目实战(二)
Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...
- 用eclipse 检索SVN 上 myEclipse 建的web项后,成java项目解决方法
用eclipse 检索SVN 上 myEclipse 建的web项后,成java项目解决方法 在网上找了非常多,都无论用. 说添加.project 文件几个属性.但我发现里面都有,在我这里无论什么用. ...
- Web自动化---解决登录页面随机验证码问题
一.抛出问题 在日常的测试工作中,遇到了这样一个登录页面,如下图: 像我们之前做过UI自动化的同学就知道,自动输入账号和密码,这个简单,但是怎么样来识别验证码呢?验证码的形式有多种,有纯数字的,纯字母 ...
随机推荐
- Blazor开发框架Known-V2.0.8
V2.0.8 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行.目前已有部分客户在使用,最近客户的项目和产品,有的在Docker中运行,有的在重新升级改造 ...
- k8s批量操作
批量删除Evicted状态pod kubectl -n gitee get pods | grep Evicted |awk '{print$1}'|xargs kubectl -n gitee de ...
- Python 字符串格式化输出
数字 n: int = 1000000000 print(f'{n:_}') # 1_000_000_000 print(f'{n:,}') # 1,000,000,000 对齐 var: str = ...
- LeetCode题集-2 - 两数相加
这个题目是什么意思呢?简单来说就是把两个链表平铺开,头节点对齐,然后从头开始相同的节点相加,满10则进位,进位值与下个节点继续相加,当一个链表没有节点时候则可以把没有节点当做0继续与有节点的链表继续相 ...
- 低代码 + BI 数字化转型如何助力制造业供应链协同?
引言 在当今快速变化的商业环境中,制造业面临着前所未有的挑战和机遇.全球化竞争.消费者需求的快速变化.技术创新的加速以及不断增加的成本压力,都要求制造企业不断提高其供应链的效率和灵活性.供应链协同作为 ...
- 揭秘!尤雨溪成立的VoidZero如何改变前端世界
前言 Vue和Vite之父尤雨溪宣布成立公司 VoidZero,目前已经融资3200万.这篇文章欧阳将带你了解VoidZero是如何改变javascript的世界! 关注公众号:[前端欧阳],给自己一 ...
- 多款国产操作系统安装数据库干货文档汇总(含Oracle/MySQL/国产数据库等)
随着国产化的逐步推进,越来越多的企业选择将数据库安装在国产操作系统上.为帮助大家了解国产操作系统上的数据库成功搭建案例与搭建方式,本文整理了墨天轮数据技术社区上用户分享的实操文档,涵盖银河麒麟.中标麒 ...
- YoloDotNet v2.1:实时物体检测的利器
项目介绍 YoloDotNet v2.1 是一个基于 C# 和 .NET 8 的实时物体检测框架,专为图像和视频中的物体检测而设计.它集成了 Yolov8 ~ Yolov11 模型,通过 ML.NET ...
- 什么是数据库连接池druid
每次数据库连接都要断开重连浪费时间,性能 [ 底层需要 tcp 连接 ] 资源复用 : 提升系统响应速度 : 避免数据库连接遗漏 :[ 长时间不操作会强制断开 ] 使用: 初始连接数:连接的个数 pa ...
- 45. beforeCreate和created的区别
data数据和methods的方法是否存在,是否定义了 : beforeCreate 都是 undefiend :