feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
# 电信请求书系统 — COBOL 测试基准程序集
|
||||
|
||||
**Telecom Billing System — COBOL Test Benchmark Suite**
|
||||
|
||||
基于 [cobol-test-benchmark.md](../cobol-test-benchmark.md) 的 35 种 COBOL 程序类型 + 8 项横跨功能测试,映射为模拟的电信请求书(计费)处理系统。
|
||||
|
||||
## 系统架构
|
||||
|
||||
```
|
||||
┌───────────────────┐
|
||||
│ 外部系统 CDR │
|
||||
│ (CSV 格式) │
|
||||
└─────────┬─────────┘
|
||||
│
|
||||
┌─────────▼─────────┐
|
||||
│ 15/21 CDR 取込 │ CSV→FB转换
|
||||
└─────────┬─────────┘
|
||||
│
|
||||
┌─────────▼─────────┐
|
||||
│ 13/27/31 CDR校验 │ 字段/半角/重複
|
||||
└─────────┬─────────┘
|
||||
│
|
||||
┌──────────────┼──────────────┐
|
||||
│ │ │
|
||||
┌──────▼──────┐ ┌────▼────┐ ┌──────▼──────┐
|
||||
│ 34 CDR 排序 │ │35 CDR合并│ │ 29 编码转换 │
|
||||
└──────┬──────┘ └────┬────┘ └──────┬──────┘
|
||||
│ │ │
|
||||
└──────────────┼──────────────┘
|
||||
│
|
||||
┌─────────────────────▼─────────────────────┐
|
||||
│ 02 合同↔CDR 匹配 (1:N) │
|
||||
│ 03 线路↔请求书 (N:1) │
|
||||
│ 01 请求书↔支付对账 (1:1) │
|
||||
│ 16-22 二级/组合匹配 │
|
||||
└─────────────────────┬─────────────────────┘
|
||||
│
|
||||
┌─────────────────────▼─────────────────────┐
|
||||
│ 24 资费表检索 (SEARCH ALL) │
|
||||
│ 25 计费子程序 (CALL) │
|
||||
│ 05/06 条件判定 (IF/EVALUATE) │
|
||||
└─────────────────────┬─────────────────────┘
|
||||
│
|
||||
┌─────────────────────▼─────────────────────┐
|
||||
│ 07/08/30 用量/费用汇总 (key切) │
|
||||
│ 32/33 混合处理 │
|
||||
└─────────────────────┬─────────────────────┘
|
||||
│
|
||||
┌─────────────────────▼─────────────────────┐
|
||||
│ 04 请求书编辑输出 (GETPUT/报表) │
|
||||
│ 09/23/26 DB更新/检索 │
|
||||
│ 14 在线照会 (CICS模拟) │
|
||||
└─────────────────────┬─────────────────────┘
|
||||
│
|
||||
┌─────────────────────▼─────────────────────┐
|
||||
│ 10/11/12 请求书分割输出 │
|
||||
│ 28 SYSIN批量参数 │
|
||||
└───────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 35 类型 → 电信业务映射
|
||||
|
||||
| 目录 | 电信功能 | COBOL 类型 | 处理阶段 |
|
||||
|------|---------|-----------|---------|
|
||||
| `01-matching-1-1` | 请求书↔支付对账 | 1:1匹配 | 对账 |
|
||||
| `02-matching-1-N` | 合同↔通话明细匹配 | 1:N匹配 | 计费前 |
|
||||
| `03-matching-N-1` | 多线路→请求书汇集 | N:1匹配 | 计费后 |
|
||||
| `04-edit-getput` | 请求书编辑输出 | 编辑 | 输出 |
|
||||
| `05-branch-if` | 料金阶梯判定(IF) | IF分支 | 计费 |
|
||||
| `06-branch-evaluate` | 套餐类型判定 | EVALUATE分支 | 计费 |
|
||||
| `07-keybreak-summary` | 加入者月汇总 | key切汇总 | 集计 |
|
||||
| `08-keybreak-aggregate` | 套餐统计 | key切聚合 | 集计 |
|
||||
| `09-db-update` | 客户DB更新 | DB更新 | DB |
|
||||
| `10-divide-50` | 请求书50分割输出 | 50分割 | 输出 |
|
||||
| `11-divide-25` | 明细25分割 | 25分割 | 输出 |
|
||||
| `12-divide-100` | 数据100分割 | 100分割 | 输出 |
|
||||
| `13-validation-nodup` | CDR字段校验 | 校验(无重复) | 前处理 |
|
||||
| `14-online-cics` | 在线客户照会 | online/CICS | 在线 |
|
||||
| `15-csv-fb-nolf` | 外部CDR CSV取込(无LF) | CSV→FB | 取込 |
|
||||
| `16-matching-2stage-1-1` | 二级请求书核对 | 二级1:1 | 对账 |
|
||||
| `17-matching-2stage-N-1` | 线路汇总→请求书 | 二级N:1 | 集计 |
|
||||
| `18-matching-MN-to-M` | 合同↔套餐匹配 | M:N→M条 | 计费 |
|
||||
| `19-matching-MN-to-N` | 套餐适用明细 | M:N→N条 | 计费 |
|
||||
| `20-matching-MN-to-MxN` | CDR详细清单 | M:N→M×N | 计费 |
|
||||
| `21-csv-fb-lf` | CDR CSV取込(有LF) | CSV→FB(LF) | 取込 |
|
||||
| `22-matching-2stage-MN` | 二级套餐匹配 | 二级M:N | 计费 |
|
||||
| `23-select-condition` | 客户合同检索 | SELECT条件 | DB |
|
||||
| `24-table-search` | 资费表检索 | 内部表 | 计费 |
|
||||
| `25-subprogram` | 计费子程序 | 子程序 | 计费 |
|
||||
| `26-db-search` | 客户信息检索 | DB检索 | DB |
|
||||
| `27-validation-halfwidth` | 电话号码格式校验 | 半角校验 | 前处理 |
|
||||
| `28-sysin` | 批量参数设定 | SYSIN读取 | 共通 |
|
||||
| `29-ascii-ebcdic` | 主机编码转换 | 编码转换 | 接口 |
|
||||
| `30-keybreak-other` | 通话状态变化检测 | key切非汇总 | 检测 |
|
||||
| `31-validation-withdup` | 重复CDR检测 | 校验(含重复) | 前处理 |
|
||||
| `32-mix-1N-samekeybreak` | 合同+月别集计 | 1:N+同key切 | 混合 |
|
||||
| `33-mix-1N-diffkeybreak` | 线路+类型切替 | 1:N+异key切 | 混合 |
|
||||
| `34-sort` | CDR排序 | SORT | 前处理 |
|
||||
| `35-merge` | 多源CDR合并 | MERGE | 取込 |
|
||||
|
||||
## 横跨功能
|
||||
|
||||
| 目录 | 电信业务场景 |
|
||||
|------|------------|
|
||||
| `cross-cutting/variable-length` | 可变长CDR记录、ODO套餐明细表 |
|
||||
| `cross-cutting/loop` | 批量处理循环(PERFORM变种) |
|
||||
| `cross-cutting/numeric-precision` | 资费计算精度(ROUNDED/SIZE ERROR) |
|
||||
| `cross-cutting/japanese` | 客户名日文处理(PIC N/全角假名) |
|
||||
| `cross-cutting/date` | 账期计算(闰年/和历/月末) |
|
||||
| `cross-cutting/rerun` | 请求书再发行(幂等性) |
|
||||
| `cross-cutting/exclusion` | 排他控制(文件竞争) |
|
||||
| `cross-cutting/performance` | 大容量CDR处理性能 |
|
||||
| `cross-cutting/file-organization` | RRDS/索引文件编成 |
|
||||
|
||||
## 流水线处理 (pipeline/)
|
||||
|
||||
端到端批处理流程:
|
||||
|
||||
```
|
||||
1. CDR取込 → 15-csv-fb-nolf (外部CDR CSV→固定长)
|
||||
2. CDR校验 → 13-validation-nodup (字段校验)
|
||||
3. CDR排序 → 34-sort (按客户/时间排序)
|
||||
4. 合同匹配 → 02-matching-1-N (合同↔CDR关联)
|
||||
5. 资费检索 → 24-table-search (套餐单价查找)
|
||||
6. 计费计算 → 25-subprogram (时长×单价)
|
||||
7. 月汇总 → 07-keybreak-summary (加入者别集计)
|
||||
8. 请求书 → 04-edit-getput (请求书输出)
|
||||
9. 分割 → 10-divide-50 (请求书50分割)
|
||||
```
|
||||
|
||||
```bash
|
||||
cd pipeline && bash run-pipeline.sh
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
# 编译全部
|
||||
bash common/scripts/build.sh
|
||||
|
||||
# 运行全部测试
|
||||
bash common/scripts/run_tests.sh
|
||||
|
||||
# 运行流水线
|
||||
cd pipeline && bash run-pipeline.sh
|
||||
|
||||
# 单个测试
|
||||
cd 34-sort && bash run.sh
|
||||
```
|
||||
|
||||
## 数据约定
|
||||
|
||||
- **客户ID**: `CUST000001` 格式 (10字节)
|
||||
- **合同ID**: `CTR000001` 格式 (10字节)
|
||||
- **CDR编号**: `CDR000001` 格式 (10字节)
|
||||
- **请求书ID**: `INV2025001` 格式 (10字节)
|
||||
- **电话号码**: `8613800138001` 格式 (中国手机, 11字节)
|
||||
- **套餐代码**: `P01/P02/P03` (3字节)
|
||||
- **金额**: 分为单位 (9字节整数)
|
||||
- **日期**: YYYYMMDD 格式 (8字节)
|
||||
- **账期**: YYYYMM 格式 (6字节)
|
||||
Reference in New Issue
Block a user