# encoding: UTF-8 from ..dao.planDao import PlanDao from ..dao.projectDao import ProjectDao from ..dao.reportDao import ReportDao from ..model.planModel import TestPlan from ..model.reportModel import Report class ReportService(object): @staticmethod def create(session, model_cls, add_info): return ReportDao.create(session, model_cls, add_info) @staticmethod def get_by_id(session, model_cls, obj_id): return ReportDao.get_by_id(session, model_cls, obj_id) @staticmethod def list_by_filters(session, model_cls, filter_list, page_num=1, page_size=20, order_column=None, asc=False): return ReportDao.list_by_filters(session, model_cls, filter_list, int(page_num), int(page_size), order_column, asc) @staticmethod def generate_report(session, plan_id, generated_by=None): plan = PlanDao.get_by_id(session, TestPlan, plan_id) if not plan: return 0, '未查询到对应计划!' project = ProjectDao.get_by_id(session, ProjectDao.project_model(), plan.project_id) if not project: return 0, '未查询到对应项目!' # 复用计划统计,保证计划详情和报告中的指标口径一致。 stats = PlanDao.plan_stats(session, plan_id) # MVP 阶段先生成简单 HTML,后续可替换为模板渲染器。 content = '
总用例:{}
通过率:{}%
'.format( plan.name, stats['total_cases'], stats['pass_rate'] ) add_info = { 'plan_id': int(plan_id), 'project_id': plan.project_id, 'product_id': project.product_id, 'name': '{}_报告'.format(plan.name), 'report_type': 1, 'summary': stats, 'content': content, 'generated_by': generated_by } return ReportDao.create(session, Report, add_info)