AIGC测试报告优化:新增all_test_schedule字段保留完整测试轮次

数据流说明

禅道数据库 → casedatacount.py (get_test_rounds) → config.json (test_schedule) → Word模板
                                    ↓ 不变
                              缺陷统计(合并时间)

方案:新增 all_test_schedule 字段

目标:保持原有 test_schedule 不变,新增 all_test_schedule 用于Word模板显示所有轮次(包括冒烟)


修改点1:casedatacount.py - 新增方法

在 casedatacount.py 中新增方法 get_all_test_rounds(不合并时间,返回所有任务):

def get_all_test_rounds(self, conn, product_id):
    """获取所有测试轮次信息(包括冒烟测试),不合并时间"""
    test_schedule = []
    
    with conn.cursor() as cursor:
        # 查询所有测试任务(不过滤冒烟)
        sql = """
            SELECT id, name, `begin`, `end`
            FROM zt_testtask
            WHERE product = %s 
              AND name LIKE '%%第%%轮%%'
              AND deleted = '0'
            ORDER BY begin, name
        """
        cursor.execute(sql, (product_id,))
        tasks = cursor.fetchall()
        
        for task in tasks:
            task_id, task_name, begin_date, end_date = task
            
            # 提取轮次编号
            round_num = self.extract_round_number(task_name)
            if not round_num:
                continue
            
            # 判断是否为冒烟测试
            is_smoke = '冒烟' in task_name
            
            begin_str = begin_date.strftime('%Y-%m-%d') if begin_date else ""
            end_str = end_date.strftime('%Y-%m-%d') if end_date else ""
            
            # 获取测试人员
            testers = self.get_testers_for_task(conn, task_id)
            
            schedule_item = {
                "round_number": round_num,
                "round_name": task_name,  # 新增:保留原始任务名称
                "begin_time": begin_str,
                "end_time": end_str,
                "testers": testers,
                "test_work": "冒烟测试" if is_smoke else ("回归测试" if round_num > 1 else "核心功能验证"),
                "remark": task_name  # 用于Word模板备注
            }
            test_schedule.append(schedule_item)
    
    return test_schedule

修改点2:casedatacount.py - generate_config 方法

在 generate_config 方法中添加 all_test_schedule 字段:

# 获取所有测试任务(用于Word模板显示全部轮次)
all_test_schedule = self.get_all_test_rounds(conn, product_id)

config = {
    ...
    "test_schedule": test_schedule,      # 原有合并后的数据(用于缺陷统计)
    "all_test_schedule": all_test_schedule,  # 新增:所有任务(包括冒烟)
    ...
}

修改点3:set_test_schedule.py - 适配新字段

修改 set_test_schedule.py 函数,增加对 round_name 的处理:

# 第102-111行,修改 schedule_row 构建
schedule_row = {
    "序号": len(test_schedule) + 1,  # 使用序号递增
    "中试轮次": round_data.get("round_name", f"第{round_number}轮"),  # 使用原始名称
    "开始时间": begin_time,
    "结束时间": end_time,
    "工作周期": work_period,
    "参与人": testers_str,
    "测试工作安排": round_data.get("test_work") or "",
    "备注": round_data.get("remark") or ""  # 原任务名称作为备注
}

修改点4:main_report_generator.py - 使用新字段

修改数据收集逻辑,优先使用 all_test_schedule:

# 第691行附近,修改 collect_test_schedule 方法
def collect_test_schedule(self):
    """收集测试时间表数据"""
    schedule_data = self.config.get("all_test_schedule") or self.config.get("test_schedule")
    ...

对比总结

字段 原逻辑 新逻辑
test_schedule 合并后的时间(用于缺陷统计) 保持不变
all_test_schedule 无 新增,包含所有任务(包括冒烟)
Word模板 使用 test_schedule 改为使用 all_test_schedule
节假日过滤 已有(calculate_working_days) 保持不变

预期输出效果

"all_test_schedule": [
    {"round_number": 1, "round_name": "中试第1轮", "begin_time": "2025-11-17", "end_time": "2025-11-26", "test_work": "核心功能验证"},
    {"round_number": 2, "round_name": "中试第2轮冒烟", "begin_time": "2025-12-02", "end_time": "2025-12-02", "test_work": "冒烟测试"},
    {"round_number": 2, "round_name": "中试第2轮", "begin_time": "2025-12-03", "end_time": "2025-12-09", "test_work": "回归测试"},
    {"round_number": 3, "round_name": "中试第3轮", "begin_time": "2025-12-11", "end_time": "2025-12-12", "test_work": "回归测试"}
]
posted @ 2026-03-16 19:16  菠萝包与冰美式  阅读(18)  评论(0)    收藏  举报