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测试】获取: