AIGC测试报告:{test_case_execution} 用例执行详情 - 数据获取与回填逻辑
一、数据获取
涉及数据库表
| 表名 |
说明 |
zt_product |
产品表,通过产品名称获取产品ID |
zt_testtask |
测试任务表,存储测试轮次信息 |
zt_testrun |
测试运行记录表,存储每个任务的用例执行结果 |
1. 查询测试任务 (zt_testtask)
└─ SQL: SELECT id, name FROM zt_testtask
WHERE product = %s AND name LIKE '%第%轮%'
AND name NOT LIKE '%冒烟%' AND deleted = '0'
ORDER BY name
2. 对每个任务查询测试运行记录 (zt_testrun)
└─ SQL: SELECT lastRunResult FROM zt_testrun WHERE task = %s
3. 统计各轮次的用例执行情况
- case_num: 总用例数 (len(results))
- case_run: 已执行数 (lastRunResult不为空)
- case_pass: 通过数 (lastRunResult = 'pass')
- case_fail: 失败数 (lastRunResult in ['fail', 'blocked'])
返回数据结构
test_cases = {
"round1": {
"case_num": 59, # 用例个数
"case_run": 59, # 执行数
"case_pass": 39, # 通过数
"case_fail": 20 # 未通过数
},
"round2": {...},
"round3": {...}
}
二、Word模板回填
# 1. 构建用例执行详情数据
test_case_execution = []
for round_key, case_info in test_cases.items():
test_case_execution.append({
"轮次": f"第{round_num}轮",
"用例个数": case_info.get("case_num", 0),
"执行数": case_info.get("case_run", 0),
"通过数": case_info.get("case_pass", 0),
"未通过数": case_info.get("case_fail", 0),
"通过比例": calculate_pass_rate(...),
"备注": ""
})
_replace_test_case_execution_placeholder()
└─ _create_test_case_execution_table()
├─ 表头: ["轮次", "用例个数", "执行数", "通过数", "未通过数", "通过比例", "备注"]
└─ 数据行: 从 test_case_execution 逐行填充
三、完整数据流
┌─────────────────────────────────────────────────────────────────┐
│ 禅道数据库 (zentao) │
├─────────────────────────────────────────────────────────────────┤
│ zt_product zt_testtask zt_testrun │
│ ┌──────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ id=4 │────►│ id=5 │────►│ task=5 │ │
│ │ name= │ │ name=中试第1轮│ │ lastRunResult=pass │
│ │ 2025-530 │ │ begin=11-17 │ │ lastRunResult=fail │
│ │ 云停车5.30 │ end=11-26 │ │ ... │ │
│ └──────────┘ └──────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ zt_testtask (id=6,7...) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ casedatacount.py - get_test_cases_stats() │
├─────────────────────────────────────────────────────────────────┤
│ 1. 查询测试任务 (过滤冒烟) │
│ 2. 查询每个任务的 zt_testrun 记录 │
│ 3. 统计: case_num, case_run, case_pass, case_fail │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ config.json │
├─────────────────────────────────────────────────────────────────┤
│ "test_cases": { │
│ "round1": {"case_num":59, "case_run":59, "case_pass":39, "case_fail":20}, │
│ "round2": {...}, │
│ "round3": {...} │
│ } │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ main_report_generator.py - 生成Word模板 │
├─────────────────────────────────────────────────────────────────┤
│ _create_test_case_execution_table() │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 轮次 │ 用例个数 │ 执行数 │ 通过数 │ 未通过数 │ 通过比例 │ 备注 │ │
│ ├──────────────────────────────────────────────────────────┤ │
│ │ 第1轮 │ 59 │ 59 │ 39 │ 20 │ 66.10% │ │ │
│ │ 第2轮 │ 59 │ 59 │ 59 │ 0 │ 100.00% │ │ │
│ │ 第3轮 │ 59 │ 59 │ 34 │ 25 │ 57.63% │ │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
四、关键SQL
-- 1. 查询测试任务(过滤冒烟)
SELECT id, name
FROM zt_testtask
WHERE product = 4
AND name LIKE '%第%轮%'
AND name NOT LIKE '%冒烟%'
AND deleted = '0'
-- 2. 查询用例执行结果
SELECT lastRunResult
FROM zt_testrun
WHERE task = 5