云呼叫服务器地址代码提交后自动测试并生成报告?一个配置文件就能搞定的事
南充云存储服务器
在现代软件开发流程中,自动化测试的真正价值往往需要通过与CI/CD流水线的集成才能发挥。因为只有当测试成为每次代码提交的守门员,自动执行并快速反馈时,它才真正发挥了作用。
GitHub Actions 作为与代码仓库原生集成的CI/CD工具,凭借其简洁的YAML配置、丰富的生态市场和强大的并行处理能力,已经成为无数开发团队的首选。
本文章会带你完成如何通过Github Action去运行你的Playwright测试,并且完成并发测试和上传报告,最终打造一个高效的现代化CI测试体系。
实战演练:Playwright 与 GitHub Actions 集成
废话不多说,那我们就开始了。
这就带大家在Github中运行Playwright,最终目标是实现:在每次发起 Pull Request (PR) 时自动运行测试,并将详细的测试报告发布到 GitHub Pages 以便查看。
Step1 初始化测试框架和测试脚本
在这篇文章中,使用Node.js 版本的 Playwright进行演示
首先,通过以下命令可以初始化Nodejs的Playwright测试框架:
npm install --save-dev @playwright/test Playwright installnpm init playwright@latest
云服务器硬盘寿命
其中,npm init playwright@lates命令运行后会引导我们搭建一个测试框架的脚手架
Step2 让测试在 Actions 上跑起来
要在GitHub Actions中实现自动运行测试,我们需要完成以下几个步骤:
在 .github/workflows/ 目录下创建一个 playwright.yml 工作流文件。使用 on 关键字定义触发时机(例如 push 和 pull_request 事件)。设置一个 job,让它在 GitHub 托管的 Runner 上运行。在 job 的步骤中调用 Playwright 命令来执行测试。以下是简单的示例
name: Playwright Testson:push:branches: [ main, master ]pull_request:branches: [ main, master ]jobs:test:timeout-minutes: 60runs-on: ubuntu-lateststeps:- name: Checkout repositoryuses: actions/checkout@v4- name: Set up Node.jsuses: actions/setup-node@v4with:node-version: 20- name: Install dependenciesrun: npm install- name: Install Playwright browsersrun: npx playwright install --with-deps- name: Run Playwright testsrun: npx playwright test- uses: actions/upload-artifact@v4if: ${{ !cancelled() }}with:name: playwright-reportpath: playwright-report/retention-days: 30
提交后Job运行成功并且生成了测试报告!
Step3 并发测试
在上一步中我们只是把测试跑起来了。但随着项目规模的增长,自动化测试用例的数量也会快速增加。想象一下:如果每次代码合并都需要运行几十分钟甚至更久,不仅会延迟部署,还会严重影响开发团队的工作效率。
那么,当然就需要使用并发测试了!
Playwright 的并发原理
Playwright 采用基于 worker 的架构:
每个测试文件在一个独立的 worker 进程中运行;默认情况下,worker 的数量 = 机器 CPU 的核心数;也就是说,机器的计算资源越多,Playwright 并发的潜力就越大。但是这里有个坑:GitHub Actions 默认使用的 ubuntu-latest Runner,只提供2 个 vCPU。
如果直接在这里要求 Playwright 启动8 个并发进程,就会出现 CPU 资源不足,进程之间不断争抢,最终导致执行时间不降反升。
解决方案:矩阵 + 分片(Matrix + Sharding)
云服务和传统服务器
那一台服务器不够,那我们就用多个小机器,每个机器只跑一部分测试。
修改 playwright.config.ts首先 ,我们通过重新配置Playwright,在 CI 环境下指定并发数并启用文件级并行:
import { defineConfig } from @playwright/test;export default defineConfig({testDir: ./tests,timeout: 60000,retries: 2,fullyParallel: true,reporter: [[html, { outputFolder: playwright-report }]],workers: process.env.CI ? 8 : 2, // 本地2个进程// 确保 fullyParallel 为 true,以允许文件级的并行fullyParallel: true,});
修改 .github/workflows/playwright.yml在workflow中添加 strategy: matrix 来启动多个 Job,并让 Playwright 使用分片(--shard)功能。
jobs:test:runs-on: ubuntu-lateststrategy:当一个 job 失败时,不要取消其他 jobfail-fast: false启动 4 个并行的 jobmatrix:shardIndex: [1, 2, 3, 4]shardTotal: [4]steps:... (安装依赖等步骤)- name: Run Playwright testsrun: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
提交后可以看到测试被分到了4个Job中运行
Step4 合并测试报告
在完成了分布式的运行后,接着又出现了一个问题。每个 job 都会各自生成一份报告,报告就会很零散。
使用的解决方法: 使用Allure报告,在所有的测试运行完成后进行合并
安装 Allure 依赖首先我们在项目中安装allure-playwright
npm install --save-dev allure-playwrightnpm install --save-dev allure-commandline
然后在 playwright.config.ts 里加上 reporter 配置:
import { defineConfig } from @playwright/test;export default defineConfig({reporter: [[list], // 控制台输出[allure-playwright], // 生成 allure 结果文件],});
在job中上传allure-results, 添加以下步骤
- name: Upload allure-resultsuses: actions/upload-artifact@v4with:name: allure-results-${{ matrix.shardIndex }}path: allure-results
合并结果并生成报告在所有分片完成后,新增一个 merge-reports job:
merge-reports:runs-on: ubuntu-latestneeds: teststeps:- uses: actions/download-artifact@v4with:path: ./allure-results下载所有 shard 的 allure-results,存放到同一目录下解压所有分片结果(每个 artifact 默认会打包成 zip)- name: Extract all allure-resultsrun: |mkdir -p merged-resultsfor d in ./allure-results/*; doecho "Looking into $d"zipfile=$(find "$d" -name "*.zip")echo "Extracting $zipfile"unzip -q "$zipfile" -d merged-resultsdone- name: Set up Node.jsuses: actions/setup-node@v4with:node-version: 20- name: Install Allure CLIrun: npm install -g allure-commandline- name: Generate Allure reportrun: npx allure generate ./merged-results --clean -o ./allure-report- name: Upload Allure reportuses: actions/upload-artifact@v4with:name: allure-reportpath: ./allure-report
执行完成后,Github Action会生成一个最终的allure-report目录,并作为artifact上传,你就可以直接下载并查看完整的合并报告。
总结
通过本文的实战演练,我们完成了一个完整的现代化测试流水线,具体包括以下内容:
从零起步:快速初始化 Playwright 测试框架基础集成:让测试在 GitHub Actions 中自动运行并发优化:利用矩阵 + 分片提升执行效率结果合并:借助 Allure 报告实现分布式结果的合并与可视化,最终形成可追溯、可共享的测试报告完整项目请访问
https://github.com/bridgeshi85/playwright-github-action-demo
腾讯云赠送服务器

扫码关注
微信好友
关注抖音