自动化测试当然需要自动的运行,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.