Playwright 集成在 Jenkins 中进行端到端自动化测试

根据之前的文章,我们大致了解了前端测试的类型以及 Playwright 的基本使用。在我们完成了 Playwright 的搭建后,我们需要将测试引入到正常开发流程中来。

不过,在流程中总不可能每次在产品端发生变化后(通常涉及多个组件)手动跑一遍测试命令,因此,我们很自然的想到需要自动化这个流程。

ps: 本文建立在以下两点:

  • 已经搭建好本地的 Playwright 测试;

  • 需要一台已经搭建好的 Jenkins 服务器😁。

测试容器化

为了 Jenkins 本机的安全,一般不会将代码直接放在本机上运行,所以需要以容器化的形式运行代码测试。

直接构建测试镜像(尝试)

我一开始的想法很直接,使用 Dockerfile 文件在Playwright 进行推送时构建测试容器,配置如下:

# Get the latest version of PlaywrightFROM mcr.microsoft.com/playwright:focal

# Set the work directory for the applicationWORKDIR /app

# Set the environment path to node_modules/.bin# ENV PATH /app/node_modules/.bin:$PATH

# COPY the needed files to the app folder in Docker imageCOPY package.json /app/COPY tests/ /app/tests/COPY config/ /app/config/

# Install the dependencies in Node environmentRUN npm install

这样做没有起初任何问题,但是很快在实际过程中遇到了,就是每次构建出来的测试镜像极重!(大约在 2GB 左右) 。

而有效的测试代码不足 100mb ,因此我们想到是否可以将基础镜像独立出来,将代码放在基础镜像中去使用测试?

通过基础镜像运行测试代码(最佳实践)

最终的运行命令如下:

docker run --rm -i -e URL=$1 -v `pwd`/playwright-report/:/app/playwright-report -v `pwd`/test-results/:/app/test-results -v `pwd`:/app/ -w /app mcr.microsoft.com/playwright:v1.32.3-jammy npm run test

以下是整条命令的拆解:

  • 在容器中执行的命令:npm run test

  • 基础镜像(包含node环境): mcr.microsoft.com/playwright:v1.32.3-jammy

  • 指定命令工作区:-w /app

  • 将本文件夹的代码挂载至容器中:-v pwd:/app/

  • 将容器中产生的报告挂载出来:-v pwd/playwright-report/:/app/playwright-report -v pwd/test-results/:/app/test-results

  • 传入参数(例:这里是我测试的域名地址):-e URL=$1

  • 创建容器并运行: docker run --rm -i ( -i 以交互方式运行, --rm 运行完此次容器后删除)

我们可以将命令置入拉取仓库的一个脚本中,这样在 Jenkins 中可以通过调用 shell 脚本很方便的调用此次测试

sh play.sh http://xxxxxx

  • # play.shif test -z $1then echo "请输入需要测试的 URL,示例:sh play.sh http://10.0.0.107:8888 {"TYPE":"Mysql","IP":"10.0.0.66","PORT":"3301","DATABASE_USERNAME":"yunqu","DATABASE_PASSWORD":"p@sswr0d123","DATABASE_NAME":"information_schema"}"else echo "正在测试,..." echo "测试执行的地址:$1" docker run --rm -i -e URL=$1 -v `pwd`/playwright-report/:/app/playwright-report -v `pwd`/test-results/:/app/test-results -v `pwd`:/app/ -w /app mcr.microsoft.com/playwright:v1.32.3-jammy npm run testfi

Jenkins 配置

在 Jenkins 中我们构建一个自由风格的软件项目

配置参数化的构建流程

将 URL 通过每次构建时的输入传递给端到端测试

 

配置拉取仓库

  • 1.在 Repsository 中配置拉取的测试代码仓库

  • 2.在 credentials 中配置使用的私钥

  • 3.选择类型 SSH Username with private key

图片

  • 4.在 Private Key 中点击 enter directly , Add 用来拉取代码的私钥

 

  • 5.最后指定拉取的分支

运行命令

添加构建步骤,选择执行 shell 。在 shell 中输入运行我们之前预设好的脚本

 

构建后生成测试报告

我们需要在 Jenkins 中添加插件 HTML Publisher plugin

之后在任务中配置构建后操作,如下:

 

这样每次测试运行完毕后,都可以通过点击 HTML Report 查看每次运行的测试情况了。 

 

报告可能会由于 Jenkins 的安全策略被拦截。因此在控制台输入命令,该命令在Jenkins不重启的情况下会一直生效

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

详见 解决 Jenkins 中无法展示 HTML 样式的问题(https://zhuanlan.zhihu.com/p/28080975)

最终报告情况

Trace Viewer

在 Playwright 中 Trace 是一个很有用的特性,但是在 Jenkins 中我找不到如何在 Jenkins 中进行 Trace Viewer 。

在官方文档中有两种手段可以查看

  • 1.下载远端的 trace.zip ,登录 trace.playwright.dev/ 选择本地需要查看的 trace.zip 。

  • 2.使用命令的形式访问远端的 trace.zip。

npx playwright show-trace https://example.com/trace.zip
  • 1.Playwright 通过指定基础镜像容器化的形式,可以快速、安全地运行在其他服务器上。

  • 2.通过对 Jenkins 的配置集成我们的Playwright 测试任务,我们可以实现自动化地测试,做到持续集成的闭环,在每次集成后中不断测试核心业务场景,确保整个应用的健壮性。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/552298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何正确查看容器的CPU使用率

进入容器中top,虽然看到的PID是容器的,但是%Cpu的统计信息却是宿主机的。 如图 原理 进程的cpu使用率是如何计算出来的? 每个进程的状态是放在文件里的,在/proc目录下,每个进程有自己pid命名的文件夹, …

基于Python大数据的微博舆情分析,微博评论情感分析可视化系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

冲上热搜-奇安信今年的年终奖。。

最近,奇安信宣布全员无年终奖,同时冲上了脉脉热搜榜第一。作为网安界的一哥,奇安信的决定无疑给许多期待年终奖的员工带来了沉重的打击。 从公司内部的绩效考核机制来看,奇安信将员工分为了5个档次:S、A、B、B、B-。而大多数员工被评定为中等的B档,这意味…

宝塔面板实现内网端口映射教程

内网穿透是一种技术,它允许外部网络(如互联网)的设备或用户访问内网(如本地局域网)中的服务。在使用宝塔面板(BT-Panel)时,你可以通过安装和配置一些插件来实现内网穿透。 以下是一…

2024年团队程序设计天梯赛模拟赛 L1 + L2

目录 L1 - 6 剪切复制 L1 - 8 小偷踩点 L2 - 1 推宝塔 L2 - 2 含茶量 L2 - 3 到底爱不爱我 L2 - 4 寻宝图 L1 - 6 剪切复制 使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl X)。请实现一个简单的具有剪切和粘贴功能的文本…

每天五分钟计算机视觉:基于卷积操作完成滑动窗口的图片分类?

本文重点 我们前面学习了使用不同大小的滑动窗口来滑动图片,然后切分成许多小的图片,然后依次应用到我们已经训练好的图像分类模型中,但是这种方式效率太低了,本节课程我们学习一种新的方式,来看一下如何并行识别这些剪切的图片。 原始结构 首先我们先来看一下,如何把…

中国12.5米DEM地形瓦片数据免费领取!

之前向大家公开了中国34个省12.5米DEM地形瓦片数据的免费领取链接,大家对12.5米DEM数据的使用需求很强烈,领取也很积极,也有不少读者反馈能否提供全国范围的12.5米DEM地形瓦片数据,因为分省级地形瓦片数据想要合并成全国数据&…

朗致集团面试-Java架构师

总结 三轮面试,第一轮是逻辑测试性格测试,第二轮是技术面试(面试官-刘老师),第三轮是CTO面试(面试官-屠老师)。如果第三轮面试通过,考官会问你薪资意向,如果满意的话HR就…

【网络编程】web服务器shttpd源码剖析——命令行和文件配置解析

hello !大家好呀! 欢迎大家来到我的网络编程系列之web服务器shttpd源码剖析——命令行解析,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器shttpd,并且我会给出源码进行剖析,以及手绘…

WAF攻防-权限控制代码免杀异或运算变量覆盖混淆加密传参

知识点 1、脚本后门基础&原理 2、脚本后门查杀绕过机制 3、权限维持-覆盖&传参&加密&异或等 章节点: WAF绕过主要集中在信息收集,漏洞发现,漏洞利用,权限控制四个阶段。 代码表面层免杀-ASP&PHP&JSP&a…

Element入门

安装ElementUI组件库 npm install element-ui2.15.3 引入 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.use(ElementUI);new Vue({el: #app,render: h > h(App) }); 应用 模板 …

C++笔记:异常

文章目录 C 运行时错误处理机制及其不足之处C 异常概念异常的使用异常的抛出和匹配原则在函数调用链中异常栈展开匹配原则异常的重新抛出举例演示说明例子一:串联举例演示大部分原则例子二:模拟服务器开发中常用的异常继承体系例子三:异常的重…

代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、46.全排列II

491. 非递减子序列 思路: 在90.子集II (opens new window)中我们是通过排序,再加一个标记数组来达到去重的目的。 而本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了。 所以不能使用之前的去重逻辑&…

「GO基础」起源与演进

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Spring容器结构

文章目录 1.基本介绍1.Spring5官网2.API文档3.Spring核心学习内容4.几个重要概念 2.快速入门1.需求分析2.入门案例1.新建Java项目2.导入jar包3.编写Monster.java4.src下编写Spring配置文件1.创建spring配置文件,名字随意,但是需要放在src下2.创建Spring …

Python景区票务人脸识别系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

Zabbix监控内容

目录 一、自定义监控内容 1、在客户端创建自定义key 1.1明确需要执行的linux命令 1.2创建zabbix监控项配置文件,用于自定义Key 1.3服务端验证测试 2、在Web界面创建自定义监控模板 2.1创建模板 2.2创建应用集(用于管理监控项) 2.3创建…

探索音质与价格的平衡点:iBasso DX260播放器体验

专业的音乐播放器作为音乐爱好者们追求高音质体验的重要工具,但是因为市面上这类产品价格差距往往很大,选择也是非常丰富,所以对于新手来说往往会难以抉择。而且今天的音乐播放器在高端和低端市场也是有着云泥之别,想要找一款在价…

PCB---Design Entry cis 绘图 导出

修改纸张大小: 画图前准备:导入 画图: 习惯: 电源朝上 地朝下 配置pbc_footprint编号: 都配置好编号就可以导出了 导出:

SGI_STL空间配置器源码剖析(五)_S_chunk_alloc函数、oom和优点

_S_chunk_alloc函数是操作自由链表分配小内存、内存不够时还会调用开辟内存函数,个人认为是空间配置器源码中最精华的一个函数,其思想真是精辟! _S_chunk_alloc代码及解析如下: /* We allocate memory in large chunks in order…