跳转至
XiTest · Technical Spec

XiTest 产品规格书

测试验证平台 · 框架架构 / API / 用例格式 / CI 规范
文档编号:D2-P7-SPEC-001 · 版本:v1.0 · 发布:2026-05-05
每一个测试都可回放 · 每一个结果都可追溯
4
测试子系统
YAML+WAV
用例格式
JUnit XML
CI 报告标准

XiTest 产品规格书

摘要

本文档是 XiTest 测试验证平台完整技术规格书,涵盖框架架构、测试用例格式、执行引擎 API、HIL 协议、报告格式、CI 集成规范。 面向测试框架开发者、算法开发者、硬件工程师、DevOps 工程师。

数据来源

规格为 v1.0 GA 目标值(2027 Q4),最终以 Release Notes 为准。


1. 总体架构

1.1 系统总览

graph TB
    CLI[xitest CLI]
    Srv[XiTest Server<br/>Orchestrator]
    CLI --> Srv

    Srv --> UnitW[Unit Worker Pool]
    Srv --> IntegW[Integration Worker Pool]
    Srv --> HILW[HIL Controller]
    Srv --> UIW[UI Worker<br/>Playwright]

    UnitW --> XAlg[XiAlgo 单测]
    IntegW --> XLink[算法链路 E2E]
    HILW --> XDSP[XiDSP EVB]
    UIW --> XStu[XiStudio/XiForge]

    Srv --> DB[(用例数据库<br/>PostgreSQL)]
    Srv --> Store[(金标 WAV 存储<br/>MinIO/S3)]
    Srv --> Report[(报告存档<br/>S3 + ElasticSearch)]

    class CLI xyL4
    class Srv xyL2
    class UnitW,IntegW,HILW,UIW xyL3
    class XAlg xyL3
    class XLink xyL2
    class XDSP xyL0
    class XStu xyL4
    class DB,Store,Report xySuccess

1.2 技术栈

技术
编排器 Go + gRPC
执行节点 Docker + containerd
Unit 框架 Google Test / Catch2 + CMake
Integration 引擎 自研 xy-test-runner(Python + NumPy/SciPy)
UI 测试 Playwright + pixelmatch
HIL 控制 Python + 专业声卡驱动 + JTAG
存储 PostgreSQL(用例元数据)· MinIO/S3(WAV)· ES(日志/报告)
监控 Prometheus + Grafana + OpenTelemetry
API gRPC(内部)+ REST(CI/用户)

1.3 部署拓扑

环境 配置
Dev(单机) 16 核 CPU / 64GB / 本地 Docker
Staging 3 节点 K8s · 32 core 总容量
Production 10+ 节点 K8s · 200+ worker · HIL 集群独立

2. 测试用例格式

2.1 用例定义(YAML)

# tests/fx/eq_boost.test.yaml
id: fx-eq-bass-boost-01
category: integration
tags: [regression, fx, eq]
priority: P1
description: "验证低频增强 EQ  60Hz  +3dB"

input:
  audio: "golden/input_pink_noise.wav"
  sample_rate: 48000
  channels: 2

pipeline:
  - algorithm: xialgo.fx.eq
    params:
      band1: { freq: 60, gain: 3, Q: 0.707 }

expected:
  audio: "golden/output_pink_noise_60hz_plus3db.wav"
  metrics:
    freq_response_at_60hz: { value: 3.0, tolerance: 0.1 }  # dB
    thd_n: { max: 0.005 }  # 百分比
    rms_overall: { tolerance: 0.5 }  # dB

timeout: 30  # 秒
retry: 2

2.2 用例分类

分类 目录 示例
FX(效果器) tests/fx/ EQ / DRC / Delay / Reverb
NR(降噪) tests/nr/ SNS / 风噪 / 路噪
Audio I/O tests/io/ ADC / DAC / 编解码
链路(E2E) tests/e2e/ 完整前装链路 / 后装链路
UI(界面) tests/ui/ XiStudio / XiForge 场景
HIL(硬件) tests/hil/ XiDSP 烧录 + 实时验证

2.3 金标管理

  • 存储位置:golden/ 目录 + MinIO/S3(大文件)
  • 命名规范:<algorithm>_<scenario>_<version>.wav
  • 审批流:
  • 提交新基线 PR(附测量报告 + 评审意见)
  • 算法 lead + QA Review
  • 合并后立即全量回归一次

3. 执行引擎 API

3.1 CLI 命令

# 运行全量套件
xitest run --suite regression --parallel 16

# 运行指定标签
xitest run --tags smoke,fx

# 运行单个用例
xitest run --case fx-eq-bass-boost-01

# HIL 模式
xitest run --hil --target XiDSP-D1 --suite tapeout-full

# 生成报告
xitest report --format html --output report.html

# 列出失败用例
xitest failed --last-run

3.2 REST API

接口 方法 描述
POST /api/v1/runs POST 创建测试运行
GET /api/v1/runs/{id} GET 查询运行状态
GET /api/v1/runs/{id}/report GET 获取 HTML 报告
GET /api/v1/runs/{id}/failed GET 失败用例列表
POST /api/v1/cases/{id}/baseline POST 更新金标(需审批令牌)

3.3 gRPC(节点间内部通信)

service TestOrchestrator {
  rpc ScheduleRun(RunRequest) returns (RunResponse);
  rpc StreamLogs(RunID) returns (stream LogLine);
  rpc GetStatus(RunID) returns (RunStatus);
  rpc CancelRun(RunID) returns (CancelResult);
}

4. HIL 子系统

4.1 HIL 节点架构

graph LR
    Worker[HIL Worker<br/>Python]
    Worker --> JTAG[JTAG 烧录]
    Worker --> AudioOut[专业声卡<br/>输出]
    Worker --> AudioIn[专业声卡<br/>输入]
    Worker --> EVB[XiDSP EVB]

    JTAG --> EVB
    AudioOut --> EVB
    EVB --> AudioIn

    class Worker xyL2
    class JTAG,AudioOut,AudioIn xyL3
    class EVB xyL0

4.2 HIL 测试流程

  1. 烧录:用 XiStudio CLI 烧录算法固件到 EVB
  2. 播放:专业声卡向 EVB 输入金标音频
  3. 采集:同声卡输入通道采集 EVB 输出
  4. 比较:离线计算频响/THD+N/SNR 等指标
  5. 判定:与预期对比 + 容差判定

4.3 故障注入能力

类型 方法
电压波动 可编程电源(±20% 波动)
温度 恒温箱 -40 ~ +85°C
EMC 标准化干扰发生器
时钟抖动 可编程时钟模块

4.4 HIL 资源调度

  • 基于优先级队列(P0 Tapeout > P1 发版 > P2 Nightly)
  • 支持独占模式(独占一台 EVB 48 小时)
  • 支持共享模式(多用例共享一台 EVB,用例级切换)

5. UI 测试子系统

5.1 Playwright 脚本规范

// tests/ui/xistudio-open-project.spec.ts
import { test, expect } from '@playwright/test';

test('打开项目并拖拽 EQ 节点', async ({ page }) => {
  await page.goto('http://localhost:5173');
  await page.click('[data-test="open-project"]');
  await page.fill('[data-test="project-name"]', 'demo-eq');

  // 拖拽算法节点
  await page.dragAndDrop(
    '[data-test="algo-lib-eq"]',
    '[data-test="flow-canvas"]'
  );

  // 视觉回归
  await expect(page).toHaveScreenshot('flow-with-eq.png', {
    maxDiffPixelRatio: 0.005
  });
});

5.2 视觉回归

  • 基准图存储tests/ui/__screenshots__/
  • 对比工具:pixelmatch(默认阈值 0.5%)
  • 分辨率:1920×1080(主)· 2K/4K 可选
  • 差异处理:差异 > 阈值 → 失败 · 生成 diff.png

5.3 跨浏览器支持

  • Chromium(主)· WebKit(macOS)· Firefox(辅)

6. 报告规范

6.1 HTML 报告结构

  • 总览:通过/失败/跳过 数量 + 耗时
  • 分层统计:Unit/Integration/Regression/UI
  • 失败详情:用例 + 错误 + WAV 对比波形 + 堆栈
  • 趋势:最近 10 次运行通过率折线图
  • 性能:每用例耗时 TopN
  • 覆盖率:算法代码覆盖率(LCOV 集成)

6.2 JUnit XML(CI 集成)

<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="XiTest v1.0" tests="1024" failures="2" time="5423.5">
  <testsuite name="fx" tests="128" failures="1">
    <testcase classname="fx.eq" name="fx-eq-bass-boost-01" time="5.2">
      <failure message="freq_response_at_60hz: 3.35 dB (expected 3.0 ±0.1)"/>
    </testcase>
    ...
  </testsuite>
</testsuites>

6.3 通知模板

❌ XiTest Regression Failed
Branch: feature/new-eq
Commit: abc123
Failures: 1 / 1024
  - fx-eq-bass-boost-01 (freq_response_at_60hz out of tolerance)
Report: https://xitest.xisound.com/runs/20260505-001

7. CI 集成规范

7.1 GitHub Actions 示例

# .github/workflows/xitest.yml
name: XiTest
on: [push, pull_request]
jobs:
  test:
    uses: xisound/xitest-actions/.github/workflows/reusable.yml@v1
    with:
      suite: ${{ github.event_name == 'pull_request' && 'integration' || 'smoke' }}
      parallel: 16
    secrets:
      XITEST_TOKEN: ${{ secrets.XITEST_TOKEN }}

7.2 GitLab CI 示例

include:
  - project: xisound/xitest-ci
    ref: v1
    file: /gitlab-ci/xitest.yml

xitest:
  extends: .xitest-base
  variables:
    XITEST_SUITE: smoke

7.3 PR 集成

  • 失败自动评论 PR
  • Status Check 必须通过才能合并
  • 可配置:新增测试必须有对应用例

8. 非功能规格

8.1 性能

指标 规格
Unit 平均耗时 ≤ 100 ms
Integration 平均耗时 ≤ 30 s
全量 Regression(1000 用例 / 16 worker) ≤ 2 h
HIL 单用例 ≤ 5 min
报告生成 ≤ 30 s
并发支持 100+ Worker(集群)

8.2 可靠性

  • 平台可用性 ≥ 99.5%
  • 测试结果可重复性 ≥ 99%
  • 假失败率 ≤ 0.5%
  • 自动重试:失败用例 ≤ 3 次

8.3 安全

  • 用例仓库:企业私有 Git
  • 金标 WAV:加密存储 + 访问审计
  • CI Token:短时令牌 + 最小权限
  • 报告访问:SSO + RBAC

9. 与其他产品的接口

产品 接口方式 说明
XiAlgo Git 仓库 + C/C++ 接口 被测对象
XiDSP JTAG + 声卡 HIL 实时硬件验证
XiStudio CLI + Playwright 烧录 + UI 回归
XiForge Playwright UI 回归
XiMind REST API(v1.1+) AI 用例生成
XiTune 数据源 调音结果可导入为测试用例

10. 已知限制与路线

10.1 v1.0 已知限制

  • 不支持:分布式 HIL 跨集群调度(v1.1 启用)
  • 不支持:AI 用例编排(v1.1 启用)
  • 不支持:Enterprise SaaS 对外(v2.0 启用)
  • UI 跨分辨率:v1.0 仅 1080p,2K/4K 需配置

10.2 路线图

  • v1.1(2028 Q2):XiMind AI 编排 + 分布式 HIL
  • v1.2(2028 Q4):D2 完整支持 + 故障注入扩展
  • v2.0(2029):Enterprise SaaS 对外版

11. 附录

11.1 关联文档

11.2 标准与开源组件

  • Google Test / Catch2(BSD / BSL)
  • Playwright(Apache 2.0)
  • pixelmatch(ISC)
  • Prometheus + Grafana(Apache 2.0)
  • OpenTelemetry(Apache 2.0)
  • JUnit XML 规范

11.3 版本历史

版本 日期 要点
v1.0 2026-05-05 首版 · v1.0 GA 完整技术规格

spec.md · D2-P7-SPEC-001 · v1.0 · 2026-05-05 · Xisound 研发中心 · 测试与工具团队