一、前言

大家好,我是六哥!

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

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

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

早在四天前就完成了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就三个浏览器,相对也比较简单,这里直接贴图了,如下:

4、基础层

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



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

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中完成了!

测试报告效果如下

运行失败截图

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

三、最后

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

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

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

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

  1. 微软出品自动化神器Playwright,不用写一行代码(Playwright+Java)系列(一) 之 环境搭建及脚本录制

    一.前言 半年前,偶然在视频号刷到某机构正在直播讲解Playwright框架的使用,就看了一会,感觉还不错,便被种草,就想着自己有时间也可以自己学一下,这一想着就半年多过去了. 读到这,你可能就去百度 ...

  2. 微软出品自动化神器Playwright(Playwright+Java)系列(四) 之 浏览器操作

    写在前面 今天是国庆节的最后一天,明天又要上班了,真的是感觉好像才开始放假一样,还是因为失恋没缓过来吗? 我的国庆七天 第1天,当了近半天的司机,陪家人去各大超市去购物,下午在家躺····· 第2-5 ...

  3. 微软出品自动化神器【Playwright+Java】系列(六) 之 字符输入、单元素键盘事件操作、上传文件、聚焦、拖拽、悬浮操作

    前言: 今天一早起床,就一直太阳穴疼,吃了四片去痛片已经无效,真的是疼的直恶心. 如果说学习或者写文章,能够或者头疼的话,那我想说,我还能坚持一会..... 很久没更新这系列的文章了,那么我们将Pla ...

  4. Selenium4+Python3系列(十二) - 测试框架的设计与开发

    前言 自己从未没想过能使用python来做自动化测试框架的设计.开发. 可能有人会好奇说,六哥,你怎么也用python写测试框架了? 领导说: python你也没有实际工作经验,可能就是自己自学的. ...

  5. 微软出品自动化神器【Playwright+Java】系列(七) 之 元素的可操作性验证

    前言 昨天在某平台发表了一篇这系列的文章,结果不但提示说有违禁词(java也算?),然后文章审核通过后,文章还找不到,不到去哪了,表示很郁闷,去反应未果,确实有点尴尬了. 元素的可操作性验证 关于AP ...

  6. 微软出品自动化神器【Playwright+Java】系列(五) 之 常见点击事件操作

    写在前面 明天就是周五了,这周有那么一两天心情特别不好,真的是做什么都没兴致,所以导致整个人都很丧,什么都不想做. 本打算周一就更新这篇文章的,但由于公司一直加班,每天到家很晚,都是挤时间去学,理解后 ...

  7. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

  8. .net基础学java系列(二)IDE 之 插件

    上一篇文章.net基础学java系列(二)IDE "扎实的基础"+"宽广的视野",基本可以帮我们摆脱码畜.码奴.码农的命运! IT领袖:IT大哥:IT精英:IT ...

  9. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  10. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

随机推荐

  1. 051_Lightning 定义 直接翻译来的

    那么为什么要命名为"Lightning"?那么,想一想关于实际Lightning,你在暴风雨中看到的那种.想想它的速度有多快,如果你眨眼,你可能会想念它.想想它是多么美丽; Lig ...

  2. JS篇(004)-js 是一门怎样的语言,它有什么特点?

    答案: 1.脚本语言.JavaScript 是一种解释型的脚本语言,C.C++等语言先编译后执行,而 JavaScript 是在程序的运行过程中逐行进行解释. 2.基于对象.JavaScript 是一 ...

  3. rpm制作(简)

    yum -y install gcc prec-devel openssl-devel zlib-devel yum -y install rpm-build #生成工作目录 rpmdev-setup ...

  4. POJ 1830 开关问题 异或高斯消元

    题目链接 将题目转化为矩乘问题 构建一个 \(n \times n\) 的开关信息矩阵,其中第 \(i\) 列第 \(j\) 行的元素为 \(0 / 1\) 代表在改变开关 \(i\) 的情况下开关 ...

  5. L2 Cracia Final Update1 OpCodz

    [87] Gracia Final Update 1 Client 00 SendLogOut 01 RequestAttack 03 RequestStartPledgeWar 04 Request ...

  6. sync.WaitGroup

    WaitGropu使用注意 作groutine参数时传指针 type WaitGroup struct { noCopy noCopy // 64-bit value: high 32 bits ar ...

  7. xmapp

    下载软件 并开启Apache 创建文本 `<?php echo " 姓名:丁文博 学号:20211306 才艺:打篮球 专业:信息安全 学校:北京电子科技学院 ";` 在网页 ...

  8. SQL-关联

    关联的本质:从一张表依次取一条数据和另一张表每一条数据进行匹配 内关联 inner join (inner可省略) -- 只显示关联的上的数据外关联有三种左外 left join -- 主表数据不丢失 ...

  9. 19 request请求数据大全

    1 request.path_info # 获取当前用户请求的url # http://127.0.0.1:8000/customer/list/ ----> /customer/list/ # ...

  10. 【APT】海莲花组织DLL样本分析

    前言 样本来源Twitter,之前的文章已经完整分析过一个类似的DLL样本,这次做个简单记录. 样本分析 样本信息如下: DLL文件共有40个导出函数: 导出函数内容基本一致,恶意代码都在DllMai ...