IWeb4j 项目思想
·IWeb项目的测试用例使用数据驱动测试,当下数据驱动使用最多的无非是excel、yaml、json、数据库(后续通过SpringDataJPA实现数据库驱动)作为数据驱动的载体,四种方式思想都一样只是实现方式不同。
目前先实现excel数据源驱动。通过开源的Easypoi文档导入导出工具完成,后续会新增数据库、yaml文件的数据驱动方式。
·页面元素定位使用封装的关键字库测试,通过dom4j解析xml方式实现。
·整体项目属于混合模型开发测试,整体项目只用显示等待解决元素加载可见可编辑问题。
项目主要技术
该项目主要技术
IWeb4j 各包目录结构说明
项目使用流程
·配置文件的加载
IWeb4j项目使用yaml配置文件
eg:页面关键字维护的页面元素xml文件通过yaml配置文件路径。
然后通过yaml的key注入配置文件路径。
·excel测试用例读写通过Easypoi实现
excel维护测试用例也是一种很常见的方式,和常用的功能测试用例几乎没有差别,只是对excel的表头进行数据映射处理。如下:
·页面元素关键定位通过dom4j解析xml的dom树实现元素定位
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vdz3WtYn-1603158139938)(https://upload-images.jianshu.io/upload_images/16753854-a3699efb4ed3c1df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
·维护的页面元素关键字也是通过映射成数据对象进行获取
·测试用例维护
·映射成dto数据的对象
·通过Easypoi封装的工具类拿到一个集合,然后遍历集合进行读取excel用例进行测试,,测试过程中可以把页面实际的测试结果批量回写到相应的实际结果栏中,这样可可以完成手工记录的繁琐。?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CLts1uzy-1603158139947)(https://upload-images.jianshu.io/upload_images/16753854-1b8462554edd270d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
·整个项目的页面关键字工具类UIElementUtil异常捕获中加入allure的截图功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukSlycuu-1603158139949)(https://upload-images.jianshu.io/upload_images/16753854-2d7669a7c42a5c6e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
这样在元素定位失败或者超时异常后都可以捕获异常并截图至allure报告中。
·测试完成后会在项目下更新allure-results文件夹,然后通过allure命令即可访问测试报告(如果想集成jenkins网上有很多教程很简单),allure-results的注解使用点击查看
效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ua1LLqpw-1603158139950)(https://upload-images.jianshu.io/upload_images/16753854-51ca33de6f3f0d47.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
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。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理