zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    

    更多测试技术分享、学习资源以及一些其他福利可关注公众号:【Coding测试】获取:
    Coding测试

    记录工作中使用的CI/CD流程
  • 相关阅读:
    springboot2.0整合logback日志(详细)
    关于Logstash中grok插件的正则表达式例子
    feign多文件上传
    HBase API(新版本)
    HBase基础知识
    Hive数据操作和数据查询
    Hive数据定义
    Hive基础知识
    Hive安装
    Spark词频统计,求TOP值,文件排序,二次排序
  • 原文地址:https://www.cnblogs.com/CodingTest/p/13841683.html
Copyright © 2011-2022 走看看