首页 > 编程语言 >微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发

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

时间:2023-03-14 21:03:57浏览次数:42  
标签:Playwright Java 神器 playwrght org import basePage com public

一、前言

大家好,我是六哥!

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

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

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

a2c209a37f012f95d8d51a99f3fc069.jpg

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

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

二、如何实现

1、框架要素

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

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

2、日志

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

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,示例代码如下:

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,好看是真的。

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

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

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写框架简单多了,至于为什么,懂得人自然也懂,这里就不分享了,感兴趣的同学可以自行尝试,也可以通过公号找到我进行交流!

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

标签:Playwright,Java,神器,playwrght,org,import,basePage,com,public
From: https://www.cnblogs.com/longronglang/p/17216329.html

相关文章

  • # 909 -「java」一维数组展开+ BFS解决 -蛇梯棋- 最短步进次数 的详细思路
    Tags:中等数组BFSjava 题目链接:909.蛇梯棋 注意事项[题目中的坑]:【"S形"的概念】:题目开头举例的N*N的数组,其内标示的1~N²数字,指代的是......
  • # 92 -「java 」 100-执行速度 - 三步『截取子链表- 递归反转- 拼接』 解题的实现思路
    Tags中等递归链表java 题目链接:92.反转链表II 解题思路[截取子链表+反转+拼接]:以1->2->3->4->5,m=2,n=4为例:【截取】定位到需要反......
  • Java Mybatis 笔记
    MyBatis1、简介1.1什么是MybatisMyBatis是一款优秀的持久层框架;它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获......
  • CFR 反编译 Java 枚举
    CFR到这里下载。运行如下命令使用当前文件夹下的cfr-0.152.jar反编译当前文件夹下的T.class。java-jarcfr-0.152.jarT.class--sugarenumsfalse其中--sugarenum......
  • Java的HashMap
    基于hash值的K-V结构数据容器。重要计算方法计算key的hash值(key==null)?0:(h=key.hashCode())^(h>>>16)利用hash计算tab中的位置p=tab[i=(n-1)&......
  • java变量和常量
    一标识符我们所认识的标识符如:类名HelloWorld标识符的命名规则标识符可以由字母,数字,下划线和和美元符$组成,不能以数字开头标识符严格区分大小写标识符......
  • java实体类之间的转换
    字段相同BeanUtils.copyProperties(item,dto);字段不同通过mapstruct,定义不同的字段名字https://blog.csdn.net/weixin_55806809/article/details/125347999......
  • 平安金服java岗
    电话一面面试官很和蔼,会适度闲聊,奈何本人全程很紧绷,自我介绍之后被安抚别太紧张 ̄□ ̄||1.自我介绍2.最近的一次项目概况,技术难点,怎么攻克的(我自爆代码是网上找的,真无语,一紧张......
  • Java容器之Hashtable源码分析
    一、概述Hashtable是一个比较古老的Map实现类,从它的名称就可以看得出来,因为没有遵循Java的语言规范。它和HashMap很像,同属于散列表,有以下特性:线程安全,这也估计算是唯一......
  • nacos报错 Caused by: com.alibaba.nacos.api.exception.NacosException: java.io.IOE
    麻麻劈,根据这个报错一顿ulimit -n 修改打开文件数,鸡儿报错一直在。 最终修改 vi/etc/sysctl.conf增加三项:fs.inotify.max_queued_events=32768fs.inotify.ma......