| name | cross-compatibility-testing |
| description | 协议/通信/编解码/文件格式类项目的竞品交叉兼容测试:我写你读、你写我读、我写我读等多模式对比验证。使用场景:项目涉及文件格式读写、网络协议通信、音视频编解码等需要与竞品互操作验证的场景。 |
| argument-hint | 说明项目类型(文件格式/网络协议/编解码)、涉及的竞品、需要验证的互操作方向。 |
竞品交叉兼容测试
适用场景
- 文件格式类项目(Excel/Word/PDF/图片/音视频容器等)
- 网络协议类项目(IoT 通信/IM 协议/自定义 TCP 协议等)
- 编解码类项目(音视频编解码/压缩/加密等)
- 任何需要证明"我的实现与行业标准/竞品兼容"的场景
核心原则
- 交叉验证是最高置信度的兼容性证明:自说自话通过 ≠ 和竞品互通
- 4 种角色排列组合:我/竞品 × 写入/读取(或 客户端/服务端、编码/解码)
- 验证标准因场景而异:文件格式允许可观差异,网络协议要求精确兼容
- 竞品作为测试 Oracle:竞品的行为就是"正确答案"
交叉测试模式矩阵
文件格式
| 编号 | 模式 | 操作 | 验证标准 |
|---|
| F1 | 我写你读 | 我的 Writer 写入 → 竞品 Reader 读取 | 竞品能正确解析,无报错 |
| F2 | 你写我读 | 竞品 Writer 写入 → 我的 Reader 读取 | 我能正确解析竞品生成的文件 |
| F3 | 我写我读 | 我的 Writer 写入 → 我的 Reader 读取 | 自校验:写出的字段能完整读回 |
| F4 | 你写你读 | 竞品 Writer 写入 → 竞品 Reader 读取 | 基线:确认竞品自身一致性 |
网络协议
| 编号 | 模式 | 操作 | 验证标准 |
|---|
| N1 | 我→你 | 我的客户端 → 竞品服务端 | 竞品正确解析我的请求并返回有效响应 |
| N2 | 你→我 | 竞品客户端 → 我的服务端 | 我的服务端正确解析并返回竞品可接受的响应 |
| N3 | 我→我 | 我的客户端 → 我的服务端 | 自通信:请求-响应完整闭环 |
| N4 | 你→你 | 竞品客户端 → 竞品服务端 | 基线:确认竞品协议行为 |
编解码
| 编号 | 模式 | 操作 | 验证标准 |
|---|
| C1 | 我编你解 | 我的编码器 → 竞品解码器 | 竞品能正确解码并还原原始数据 |
| C2 | 你编我解 | 竞品编码器 → 我的解码器 | 我能正确解码竞品编码的数据 |
| C3 | 我编我解 | 我的编码器 → 我的解码器 | 自校验:编码后解码还原原始数据 |
| C4 | 你编你解 | 竞品编码器 → 竞品解码器 | 基线:确认竞品编解码行为 |
执行步骤
1. 判断项目类型与适用模式
| 项目特征 | 项目类型 | 适用模式 |
|---|
| 读写文件、操作文档格式 | 文件格式 | F1-F4 |
| 监听端口、建立连接、收发数据包 | 网络协议 | N1-N4 |
| 数据编码/解码、压缩/解压 | 编解码 | C1-C4 |
| 同时涉及上述多种 | 混合型 | 组合适用模式 |
2. 引入竞品依赖
在 XUnitTest 项目中引入竞品 NuGet 包作为测试依赖。竞品依赖仅用于测试项目,不污染生产代码。
3. 编写交叉测试用例
使用 xUnit + [DisplayName("中文描述意图")],命名格式:{模式编号}_{描述}。
4. 验证与判定
| 模式 | 通过标准 | 不通过处理 |
|---|
| F1/F2 | 竞品能解析,关键字段值一致 | 分析差异,修复兼容性 |
| F3 | 自校验字段完整读回 | 纯 bug,直接修复 |
| N1/N2 | 完整请求-响应循环 | 抓包对比协议帧差异 |
| C1/C2 | 解码输出与原始输入一致 | 分析编解码参数差异 |
测试用例优先级
| 优先级 | 模式 | 说明 |
|---|
| 🔴 高 | F2/N2/C2(你写我读) | 最关键——证明我能兼容业界标准 |
| 🔴 高 | F3/N3/C3(我写我读) | 基础门禁 |
| 🟡 中 | F1/N1/C1(我写你读) | 证明我的输出能被业界接受 |
| 🟢 低 | F4/N4/C4(你写你读) | 基线参考 |
注意事项
- 交叉测试是集成测试的子集,放在
XUnitTest 项目对应子目录
- 使用
[Trait("Category", "CrossCompatibility")] 分类
- 竞品 NuGet 版本升级后需重新验证
- 竞品本身有 bug 时,在测试中注释说明,不作为我方失败