在Azure CI/CD中统计Playwright测试数用于Grafana指标监控
在Azure CI/CD中用Playwright统计测试数量并集成到Grafana的需求
当前实现方案
我在Azure CI/CD管道中使用Playwright测试框架,需要跟踪随时间创建的测试数量,用于在Grafana仪表盘中可视化。目前用PowerShell脚本通过正则表达式解析测试文件统计测试注解(无需执行测试,仅做计数),步骤如下:
- 用正则匹配不同格式的测试注解:
$testCount = 'test\(.+?,\s*async' # 匹配 test(...) 格式的测试 - 统计测试文件中的匹配数量并格式化:
$myResult[$repo]['TestCount'] = ($searchTestFiles | Get-Content | Select-String -Pattern $testCount | Measure-Object).Count
最后将结果转为JSON格式输出。这个方案虽然能用,但一旦测试注解语法变更就容易出错,目前这么做是为了节省Azure成本。
核心疑问
请问Playwright是否提供内置命令或API来获取项目测试数量,包括跳过、聚焦等不同测试状态的统计?我想找更稳健可靠的方式收集数据用于Grafana仪表盘,理想情况不需要依赖正则表达式。
我希望获取类似这样的统计信息:
Total tests: 13 Skipped tests: 3
有没有能提供这类统计的Playwright API或CLI命令?或者有哪些更推荐的将这类数据导出到Grafana的策略?
我曾尝试过以下npx命令,但没得到想要的结果:
npx playwright test --list --reporter=json
解决方案
1. 基于Playwright CLI的--list参数处理
Playwright的--list参数可以列出所有测试(包含状态标记),结合--reporter=json输出的结构化数据,你可以用脚本解析出所需统计:
- 执行命令导出测试列表:
npx playwright test --list --reporter=json > test-stats.json - 用Node.js脚本解析JSON结果,提取关键统计:
const fs = require('fs'); const testList = JSON.parse(fs.readFileSync('test-stats.json', 'utf8')); const totalTests = testList.length; const skippedTests = testList.filter(item => item.status === 'skipped').length; const focusedTests = testList.filter(item => item.status === 'focused').length; const stats = { totalTests, skippedTests, focusedTests }; console.log(JSON.stringify(stats));
这个方法完全依赖Playwright的内置输出,不受注解语法变化影响,且无需执行测试,成本极低。
2. 使用Playwright编程式API
如果需要更灵活的控制,可以用Playwright的JavaScript API直接加载测试配置并扫描测试:
const { test } = require('@playwright/test'); async function getTestStats() { const config = await test.loadConfig(); let total = 0; let skipped = 0; for (const project of config.projects || []) { const testFiles = await test.collectTests(project); for (const file of testFiles) { for (const testCase of file.testCases) { total++; if (testCase.skipped) skipped++; } } } return { totalTests: total, skippedTests: skipped }; } getTestStats().then(stats => console.log(JSON.stringify(stats)));
运行该脚本即可输出结构化统计数据,同样无需执行测试,仅做静态分析。
3. 导出到Grafana的推荐策略
- 直接推送数据: 将脚本输出的JSON数据,通过Azure CI/CD任务(如PowerShell或Azure CLI)推送到Grafana支持的数据源(如Prometheus Pushgateway、InfluxDB)。示例:
curl -X POST -H "Content-Type: application/json" --data @stats.json http://your-gateway-url:9091/metrics/job/playwright-test-stats - 存储报告文件: 用Playwright的JSON报告生成统计文件,上传到Azure Blob Storage等存储服务,再配置Grafana读取存储中的文件数据。
- CI/CD变量传递: 在CI/CD管道中将统计结果设为环境变量,后续步骤调用Grafana API将数据写入对应数据源。
内容的提问来源于stack exchange,提问作者saab613
相关产品推荐
相关产品推荐

