• 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发


    一、前言

    大家好,我是六哥!

    又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的。

    其实不是我不积极,而是相对更文学习来说,优先级不是最高。

    对我而言,目前最重要的就是减肥,除了下雨下雪,我都坚持每天5公里,keep记录如下:

    a2c209a37f012f95d8d51a99f3fc069.jpg

    早在四天前就完成了playwright的框架开发,因为一些事要处理就把文章的事搁置了。

    下面将为大家分享关于playwright的自动化测试框架的设计与实现,这里仅分享思路,感兴趣的同学请自行尝试!

    二、如何实现

    1、框架要素

    延续了所有框架的通用要素:

    • 日志&测试步骤
    • 报告&失败截图
    • 配置文件&数据源设计
    • 公共函数&API封装
    • 测试数据&参数化、解耦
    • 测试套件&测试用例设计、组装

    2、日志

    日志可以很好辅助我们定位问题,这里我使用的是log4j,简单配置即可使用,测试代码如下:

    java
    package com.playwrght.frame.log;
    
    import org.apache.log4j.Logger;
    import org.testng.annotations.Test;
    
    public class TestLog {
        /**
         * log4j日志
         */
        private static Logger logger = Logger.getLogger(TestLog.class);
        @Test
        public void testLog() {
            logger.info("this is info log!!");
            logger.error("this is error log!!");
        }
    }

    3、浏览器的封装

    playwrght就三个浏览器,相对也比较简单,这里直接贴图了,如下:

    image.png

    4、基础层

    这里主要用于处理,元素对象和原生API的封装,示例如下图:

    image.png
    我只写了点击和输入的,其他的没写,感兴趣的同学请自己尝试。

    5、测试用例

    就是调用封装好的API,示例代码如下:

    java
    package com.playwrght.frame.testcase;
    
    import com.playwrght.frame.page.BasePage;
    import com.playwrght.frame.report.TestFailListener;
    import io.qameta.allure.*;
    import org.testng.Assert;
    import org.testng.annotations.*;
    
    @Epic("登录功能测试")
    @Feature("登录功能")
    @Listeners(TestFailListener.class)
    public class TestLogin extends BasePage {
        BasePage basePage;
        @BeforeClass
        public void beforeClass() {
             basePage = new BasePage();
        }
    
        //用例编号
        @TmsLink("562")
        //bug编号
        @Issue("4042")
        //bug严重等级,优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
        @Severity(SeverityLevel.TRIVIAL)
        //用例描述
        @Description("测试一个流程,用作回归冒烟测试")
        /**
         *功能块,具有相同feature或astory的用例将规整到相同模块下,执行时可用于筛选
         */
        @Story("登录模块-登录功能")
        @Test(description = "验证登录功能", dataProvider = "loginData")
        public void testDemo(String userName,String passWord,String msg) throws Exception {
            basePage.open();
            basePage.fill("用户名",userName);
            basePage.fill("密码",passWord);
            basePage.click("登录按钮");
            String content = basePage.getTextContent("错误提示");
            Assert.assertEquals(content,msg);
        }
    
        @AfterClass
        public void afterClass() {
            basePage.quite();
        }
    
        @DataProvider(name = "loginData")
        public Object[][] loginData() {
            return new Object[][]{
                    {"user1","1","用户名或密码错误"},
                    {"user2","2","用户名或密码错误"},
                    {"user3","3","error!"},
            };
        }
    
    }

    6、测试报告

    因徒弟说playwight+python+飞书很秀,我一看报告就是allure,好看是真的。

    就一个配置出来的东西,没什么,就那么回事吧,也不难,所以不熟悉的同学,看看官方文档就能很快上手!

    加了监听,即可实现运行失败截图,如下面代码:

    java
    package com.playwrght.frame.report;
    
    import io.qameta.allure.Attachment;
    import org.testng.ITestResult;
    import org.testng.TestListenerAdapter;
    
    import static com.playwrght.frame.page.BasePage.page;
    
    public class TestFailListener extends TestListenerAdapter {
    
        @Override
        public void onTestFailure(ITestResult result) {
            screenshot();
        }
    
        @Attachment(value = "screen shot",type = "image/png")
        public byte[]  screenshot(){
            byte[] buffer = page.screenshot();
            return buffer;
        }
    
    }

    说明:这里我没用Jenkins驱动生成报告,没必要,全在maven中完成了!

    测试报告效果如下

    image.png

    运行失败截图

    image.png

    持续集成我就不写了,百度一搜一大把,真的超级简单,可自行尝试!

    三、最后

    写到这里,关于Playwright系列教程的文章就基本完结了!

    总体感觉比Selenium写框架简单多了,至于为什么,懂得人自然也懂,这里就不分享了,感兴趣的同学可以自行尝试,也可以通过公号找到我进行交流!

    我是六哥,爱减肥的六哥,后面还会为大家分享更多技术文章,还请继续关注我!


    __EOF__

  • 本文作者: 久曲健的测试窝
  • 本文链接: https://www.cnblogs.com/longronglang/p/17216329.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    web前端期末大作业——基于HTML+CSS+JavaScript实现中国茶文化(30页)
    关于RISC-V安全性的全面综述
    【obs】windows版本号判断
    13-Django-基础篇-HttpResponse对象
    ggplot2 -- geom_linerange 函数的简单使用
    English语法_指示代词 this / these / that / those
    8 ICMP与ping
    猿创征文|嵌入式系统应用开发工具链必备
    Markdown语法入门
    译:零信任对 Kubernetes 意味着什么
  • 原文地址:https://www.cnblogs.com/longronglang/p/17216329.html