You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:46:12