网易首页 > 网易号 > 正文 申请入驻

测试实战”:Jenkins+Docker+Playwright自动化测试全链路

0
分享至

自动化测试当然需要自动的运行,Jenkins作为一款经典的持续集成工具仍被广泛应用于企业的自动化测试部署和执行。

作为测试工程师掌握Jenkins的使用,能够有效提升测试效率从而扩大自动化测试的影响力!



本篇文章主打一个实战干货,直接带大家通过一个demo project学习使用Jenkins运行Playwright测试并生成报告的完整链路实现。

最终效果:我们将实现什么?

一键执行,全程自动化

在 Jenkins 点击“构建”,流水线将自动拉取最新代码,在隔离的容器中准备好所有环境,并运行 Playwright 测试。

Allure报告集成

生成Allure测试报告并且可以通过Jenkins直接查看

邮件即时通知

运行测试结束后,自动发送包含构建状态、测试信息和Allure报告链接的邮件。

准备工作

1.Docker

本文将会使用Docker的方式安装Jenkins,并且playwright测试也会在容器中执行

2.Playwright 测试项目

●准备一个可正常运行的 Python Playwright + Pytest 项目。

●如果需要一个示例项目,可以从我的 GitHub 仓库获取:[https://github.com/bridgeshi85/playwright-pytest-allure-framework]

3.邮件发送服务

准备一个 SMTP 邮箱账号(推荐163邮箱)

部署Jenkins服务

1. 准备 Jenkins 镜像

首先创建一个 Dockerfile,代码如下

FROM jenkins/jenkins:lts USER root # -------- Install Docker CLI -------- RUN apt-get update && \ apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release && \ install -m 0755 -d /etc/apt/keyrings && \ curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ chmod a+r /etc/apt/keyrings/docker.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \ apt-get update && \ apt-get install -y docker-ce-cli docker-compose-plugin && \ rm -rf /var/lib/apt/lists/* # -------- Install Jenkins plugins (as root) -------- COPY plugins.txt /usr/share/jenkins/plugins.txt RUN jenkins-plugin-cli --plugin-file /usr/share/jenkins/plugins.txt EXPOSE 8080

重点说明:

●Jenkins需要通过docker命令启动容器,playwright的测试会运行在宿主机的容器中(稍后会提到),所以需要安装docker cli命令行工具

●为了避免Jenkins Pipeline 中执行 Docker 命令时出现 permission denied,使用了root用户。但是需注意,尽量避免在生产环境中这样操作

● 通过jenkins-plugin-cli预先安装了以下plugin,具体文件在示例项目jekins目录下plugins.txt中, 内容如下:

workflow-aggregator:2.7git:5.8.0docker-workflow:1.28credentials-binding:702.vfe613e537e88ssh-agent:295.v9ca_a_1c7cc3a_a_email-ext:2.102allure-jenkins-plugin:2.33.0

准备完成后在Dockerfile和plugins.txt所在目录下执行以下命令来构建镜像:

docker build -t my-jenkins:latest .

2. 启动 Jenkins

首先通过以下命令确认自己的 Docker Socket 使用的路径:

docker context ls

运行后可以看到以下内容:

NAME DESCRIPTION DOCKER ENDPOINT ERRORdefault DOCKER_HOST based configuration unix:///var/run/docker.sockdesktop-linux* Docker Desktop unix:///Users/xxxx/.docker/run/docker.sock

接着使用 docker 运行 Jenkins 容器

docker run -d \ --name my-jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v ~/.docker/run/docker.sock:/var/run/docker.sock \ my-jenkins:latest

注意启动 Jenkins 容器时,需要将宿主机上 Docker Desktop 使用的 socket 路径(~/.docker/run/docker.sock)挂载到容器内的 /var/run/docker.sock。

它的作用是什么?默认情况下,容器内部无法直接运行底层的 Docker 命令。

因此,我们将宿主机的 Docker Socket 目录映射到 Jenkins 容器中,使 Jenkins 能够调用宿主机的 Docker 启动测试容器。这种方式通常称为 Docker outside Docker(DoD)模式。

3. 初始化 Jenkins

Jenkins 容器成功运行后,打开浏览器访问 http://localhost:8080,将会看到 Jenkins 的“解锁”页面



初始密码可以从容器日志中获取。因为之前启动的容器名为 my-jenkins,可以执行以下命令查看其启动日志:

docker logs my-jenkins

在日志输出中向下滚动,找到被 ***包围的部分,其中的字符串就是密码。

[LF]> [LF]> *************************************************************[LF]> *************************************************************[LF]> *************************************************************[LF]> [LF]> Jenkins initial setup is required. An admin user has been created and a password generated.[LF]> Please use the following password to proceed to installation:[LF]> [LF]> d26b15f6f46f415ca77ee3f06faa1fbc[LF]> [LF]> This may also be found at: /var/jenkins_home/secrets/initialAdminPassword[LF]> [LF]> *************************************************************[LF]> *************************************************************[LF]> *************************************************************

将初始密码复制并粘贴到浏览器的输入框中,点击“继续”。随后按照引导安装推荐的插件,等待安装完成并设置好你的管理员账号后,就可以正式进入我们的 Jenkins 了!

创建 Pipeline Job 并运行测试

准备测试环境:启动被测应用与构建测试镜像

为了让测试顺利运行,本文准备了一个简单的 demo 前端项目(demo-frontend)作为被测系统。你可以通过仓库获取相关代码:

[https://github.com/bridgeshi85/playwright-pytest-allure-framework]

接下来,我们将搭建测试环境并构建Playwright测试镜像。

构建并运行前端应用

为了让 Jenkins 中的测试容器能够访问到被测应用,我们首先需要创建一个Docker网络

docker network create e2e-test

进入 demo-frontend 目录,构建应用镜像并启动容器。关键点在于使用 --network 参数将容器加入我们刚创建的 e2e-test 网络。

# 构建镜像docker build -t demo-frontend:latest .# 启动容器,并加入网络docker run -d \ --name demo-frontend \ --network e2e-test \ -p 3000:80 \ demo-frontend:latest

构建测试代码运行镜像

在测试代码所在的目录(playwright-automation-test)下,打开终端执行以下命令。请注意,镜像名称 playwright-test-agent:latest 必须与后续 Jenkinsfile 中指定的名称保持一致。

docker build -t playwright-test-agent:latest .

至此,测试所需的基础设施(测试应用和镜像)已准备完成。

第一步:在Jenkins Pipeline中运行测试

1、在 Jenkins 首页左侧点击 New Item(新建任务)。

2、输入任务名称(例如:Playwright-UI-E2E),选择 Pipeline(流水线),点击 OK。



3、下拉至 Pipeline 区域,选择 Pipeline script 并将以下代码贴入

pipeline { agent any stages { stage('Checkout') { agent any steps { git branch: 'main', url: 'https://github.com/bridgeshi85/playwright-pytest-allure-framework' } } stage('Run UI Tests (Playwright Agent)') { agent { docker { image 'playwright-test-agent:latest' args '--network e2e-test' pipeline { agent any stages { stage('Checkout') { agent any steps { git branch: 'main', url: 'https://github.com/bridgeshi85/playwright-pytest-allure-framework' } } stage('Run UI Tests (Playwright Agent)') { agent { docker { image 'playwright-test-agent:latest' args '--network e2e-test' reuseNode true } } steps { sh ''' set -euxo pipefail echo "Running tests..." cd playwright-automation-test pytest tests/test_login.py --env=jenkins -s ''' } } } }

该 Pipeline 中定义了两个主要阶段:代码拉取和在执行测试。

阶段一:代码拉取(stage('Checkout'))

从 GitHub 仓库拉取代码,指定分支为 main

阶段二:运行 UI 测试(stage('Run UI Tests (Playwright Agent)'))

① 使用 docker agent,指定镜像 playwright-test-agent:latest,并通过加入网络 e2e-test,这样我们的测试容器就能找到 demo-frontend 应用

② 在容器内执行以下命令 Shell 命令。

●set -euxo pipefail:设置 Bash 选项,确保脚本严格执行、打印命令并在错误时退出。

●echo "Running tests...":输出日志。

●cd playwright-automation-test:切换到测试目录。

●pytest tests/test_login.py --env=jenkins -s:通过 pytest 执行测试

备注:本示例仓库已设为公开访问,因此可以直接拉取。如果是私有仓库,请使用自己的 GitHub Token。

4、运行测试

准备就绪后,点击左侧菜单栏中的 立即构建(Build Now) 运行测试,运行完成后可以在任务日志中看到如下内容



第二步:展示 Allure 报告

测试通过后会在工作区生成 Allure 报告文件,我们可以通过 Jenkins 的 Allure 插件直接在 Jenkins 中展示报告。

配置步骤

1、进入全局工具配置:在 Jenkins 页面右上角点击 系统配置,然后找到并点击 Tools(全局工具配置)

2、添加 Allure Commandline:

●在配置页面中向下滚动,找到 Allure Commandline 区域,点击 Add Allure Commandline

●输入别名,并勾选自动安装

●在下拉菜单中选择一个较新的版本,并选择默认从 Maven Central 下载即可。

3、在 Job 中配置 Allure

回到之前创建的 Pipeline Job,修改 Pipeline 脚本,在 stages 部分之后添加以下代码:

post { always { allure( includeProperties: false, jdk: '', resultPolicy: 'LEAVE_AS_IS', results: [[path: 'playwright-automation-test/reports/allure-results']] ) }}

再次 Build 之后,我们可以在构建页面中看到 Allure Report 的链接



第三步:发送邮件报告

最后一步是将测试结果和报告链接及时推送给团队邮箱,便于测试成果的共享与同步。Jenkins 提供了邮件插件 emailext(Extended E-mail Notification)来帮助我们实现。

Jenkins Email 插件配置步骤

首先,需要准备一个已开通 SMTP 的邮箱,这里以 163 邮箱为例(SMTP 设置方法不再赘述)。邮箱准备好后,回到 Jenkins 进行插件配置:

1、添加邮箱 Credentials:

●进入 Manage Jenkins(系统管理)→ Security → Credentials

●点击 + Add Credentials,选择 Username with password

●Username 填写邮箱地址,Password 填写 SMTP 授权码(不是邮箱登录密码)

2、配置插件:

●进入 Manage Jenkins(系统管理)→ System

●向下滚动找到 Extended E-mail Notification(注意:页面中还有一个普通的“E-mail Notification”,实测两者任选其一即可,也可都填写)

3、填写参数:

●SMTP server:输入 smtp.163.com

●SMTP port:输入 465

●Use SSL:勾选

●Credentials:选择之前创建的 163 邮箱凭证

●Default user e-mail suffix:输入 @163.com



4、配置 Jenkins 默认发送的邮箱地址:

●进入 Manage Jenkins(系统管理)→ System

●System Admin e-mail address 中填写与第一步相同的 Username(由于 163 安全设置,SMTP 发送时的邮箱地址必须一致)

Pipeline 中添加邮件通知步骤

配置完成后,我们回到之前创建的 Pipeline,在 allure step 后添加以下步骤:

emailext( subject: "[${env.JOB_NAME}] Build #${env.BUILD_NUMBER} - ${currentBuild.currentResult}", to: "${params.EMAIL_RECIPIENTS}", mimeType: 'text/html', body: """ """)

Build Status: ${currentBuild.currentResult}

Job: ${env.JOB_NAME}

Build Number: ${env.BUILD_NUMBER}

Build URL: ${env.BUILD_URL}

Allure Report: View Report

Build 完成后,Jenkins 就会自动将这封包含了测试结果的邮件,发送到我们在触发时填写的收件人邮箱里:



☑️想要提升自己的薪资,想要在行业走得更长久更好,不妨提升自己的技能,

☑️如果你当前的工作已经达到天花板,选择换个行业,也许会事半功倍。

☑️如果你渴望高薪岗位或者想要转行,可以戳⬇️⬇️⬇️

公主号【Atstudy技术社区】,内含项目实战等各种资料包

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
苹果承认 iPhone Duo 存在屏幕裂纹问题!可以免费换新

苹果承认 iPhone Duo 存在屏幕裂纹问题!可以免费换新

XCiOS俱乐部
2026-10-27 09:54:32
项立刚提议征收生育税,这是要公然践踏人权啊,而且怎么操作呢?

项立刚提议征收生育税,这是要公然践踏人权啊,而且怎么操作呢?

读鬼笔记
2026-10-27 21:49:48
缅北"副总司令"被抓,全网都在问:他为什么有中国国籍?

缅北"副总司令"被抓,全网都在问:他为什么有中国国籍?

小影的娱乐
2026-10-09 16:26:10
周迅开会穿旗袍,被大衣一压,反而比红毯还好看

周迅开会穿旗袍,被大衣一压,反而比红毯还好看

木子娱你同行
2026-10-27 10:19:21
中美德盾构机差距多大:日本每小时3.6米,德国6米,中国是多少?

中美德盾构机差距多大:日本每小时3.6米,德国6米,中国是多少?

抽象派大师
2026-10-26 01:57:49
哈里梅根仿王室行程激怒凯特王妃,多年积怨爆发,坚持先问责

哈里梅根仿王室行程激怒凯特王妃,多年积怨爆发,坚持先问责

艺利森
2026-10-28 09:23:49
1979年,贺子珍终于抵达北京,她与毛主席拍下了最后一张合影!

1979年,贺子珍终于抵达北京,她与毛主席拍下了最后一张合影!

海佑讲史
2026-10-20 23:16:14
6.98万拿下501km续航,十万内纯电车为什么迎来爆发?

6.98万拿下501km续航,十万内纯电车为什么迎来爆发?

三农老历
2026-10-27 16:41:36
乌克兰要减少对马斯克依赖,首颗自主通信测试卫星开始运行

乌克兰要减少对马斯克依赖,首颗自主通信测试卫星开始运行

桂系007
2026-10-27 23:48:39
随着上海海港2-3,神户胜利船1-0,京都不死鸟5-2,亚冠精英赛最新积分榜出炉

随着上海海港2-3,神户胜利船1-0,京都不死鸟5-2,亚冠精英赛最新积分榜出炉

侧身凌空斩
2026-10-27 20:03:13
央视又出重磅!广电特批60集,凭什么让观众提前一年开始等

央视又出重磅!广电特批60集,凭什么让观众提前一年开始等

手工制作阿歼
2026-10-28 00:31:45
你能接受吗?皇马官方依旧摆出傲慢态度,中国赞助商理解!

你能接受吗?皇马官方依旧摆出傲慢态度,中国赞助商理解!

罗掌柜体育
2026-10-28 10:20:51
亚马尔:我不急不躁,因为我知道属于我的时刻终有一天会到来

亚马尔:我不急不躁,因为我知道属于我的时刻终有一天会到来

懂球帝
2026-10-28 03:08:16
消失五年后,50岁的赵薇出席新加坡活动,自曝谋生新手段

消失五年后,50岁的赵薇出席新加坡活动,自曝谋生新手段

白夜书声
2026-10-28 09:22:45
毛东东坐在曾祖父毛主席当年学习的课桌前,相貌神态酷似曾祖父

毛东东坐在曾祖父毛主席当年学习的课桌前,相貌神态酷似曾祖父

大江
2026-10-20 13:58:43
“爷爷黄毛,奶奶满背!”一家五口火了,网友:孩子小学毕业就算高学历!

“爷爷黄毛,奶奶满背!”一家五口火了,网友:孩子小学毕业就算高学历!

林林先生
2026-09-12 12:25:03
别再逼孩子运动了!哈佛大学研究发现:孩子最缺的不是篮球、游泳,而是“疯跑、打滚、爬树”等无序运动

别再逼孩子运动了!哈佛大学研究发现:孩子最缺的不是篮球、游泳,而是“疯跑、打滚、爬树”等无序运动

品读时刻
2026-10-27 09:05:45
姆巴佩迎来全网骂潮,是因为他触及了,中国球迷的“3个底线”

姆巴佩迎来全网骂潮,是因为他触及了,中国球迷的“3个底线”

观锐器
2026-10-27 14:10:38
45分+47分!华子接受右膝关节镜手术,3.04亿美金超级顶薪没戏了

45分+47分!华子接受右膝关节镜手术,3.04亿美金超级顶薪没戏了

微评体育圈
2026-10-28 08:37:43
相声演员苗阜发文,表示自己时刻准备着,配图一张背影惹人深思

相声演员苗阜发文,表示自己时刻准备着,配图一张背影惹人深思

小椰的奶奶
2026-10-27 06:11:23
2026-10-28 11:28:49
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1668文章数 13285关注度
往期回顾 全部

科技要闻

AI世界开口说话!谷歌新模型Genie 4有多神

头条要闻

牛弹琴:博索纳罗败选携妻女"流亡"美国 卢拉气得大骂

头条要闻

牛弹琴:博索纳罗败选携妻女"流亡"美国 卢拉气得大骂

体育要闻

悲惨!杰威重伤倒下 最好的雷霆已成过去?

娱乐要闻

王心凌近况!分手已9年,如今还是单身

财经要闻

解密 “速成车”:一辆车怎样更快造出来?

汽车要闻

纯电续航1003km 大五座SUV腾势N8正式开启预订

态度原创

健康
教育
本地
时尚
公开课

查不出猝死风险?可能是项目没做对

教育要闻

研究生学位评价变了!5类专业拟试点“不写论文拿学位”

本地新闻

十月奔赴迪庆,解锁梅里日照金山

「初代恶女」的选择:比起做母亲,我更想先做自己

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版