XiTest · Technical Spec
XiTest 产品规格书
测试验证平台 · 框架架构 / API / 用例格式 / CI 规范
每一个测试都可回放 · 每一个结果都可追溯
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 测试流程
- 烧录:用 XiStudio CLI 烧录算法固件到 EVB
- 播放:专业声卡向 EVB 输入金标音频
- 采集:同声卡输入通道采集 EVB 输出
- 比较:离线计算频响/THD+N/SNR 等指标
- 判定:与预期对比 + 容差判定
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 关联文档
- XiTest 产品概述
- XiTest PRD v1.0
- XiAlgo 产品规格书
- XiDSP 产品规格书
- XiStudio 产品规格书
- XiMind 产品规格书
- Xisound 产品矩阵 V1.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 研发中心 · 测试与工具团队