diff --git a/services/plan_service.py b/services/plan_service.py index 2e5948722e1b9a0fe040fc8db332d44ed8b844ca..1028a7d8ecdf112897ec89ff443c7704ffedccf4 100644 --- a/services/plan_service.py +++ b/services/plan_service.py @@ -7,7 +7,7 @@ from common.enums import Status_EN, Task_Run_Method, Case_Type, Case_Run_Method, from common.tone.tone_request import gen_tone_job_type from models.case_model import Case from models.device_model import Device -from models.job_model import FuncResult +from models.job_model import FuncResult, PerfResult from models.plan_model import Plan, PlanReview from models.requirement_model import Requirement from models.task_model import Task, update_manual_task_status @@ -216,8 +216,11 @@ async def __start_auto_task(auto_tasks): 'job_type': gen_tone_job_type(job_type) }) if not ok: - log.logger.debug(ret) - task.status = Status_EN.RUNNING.value + log.logger.info(ret) + task.status = Status_EN.FAIL.value + task.desc = ret + else: + task.status = Status_EN.RUNNING.value await task.update() @@ -266,24 +269,60 @@ async def export_plan(plan_id): # 处理自动的功能测试用例结果 # todo 建立tone用例和testlib用例之间的关联,通建立一个hash map de_dict = dict() - func_cases = await FuncResult.query_obj_all(FuncResult.task_id.in_(auto_task_ids)) - for func_case in func_cases: - case_name = func_case.sub_case_name - if case_name not in de_dict: - de_dict[case_name] = '' - else: - case_name = f'task-{func_case.task_id}-{case_name}' - auto_case = { - "name": case_name, - "type": Case_Type.FUNCTIONAL.value, - "result": func_case.sub_case_result, - "creator": task_dict[func_case.task_id].owner, - "priority": '0', - "run_method": Case_Run_Method.AUTO.value, - "suite_name": '/default', - "status": func_case.sub_case_result.value - } - __update_func_result_count(auto_case, result) + result['test_result']['perf_test'] = {'cases': []} + for task in tasks: + for case in task.run_result['case_infos']: + case_detail = case_name_dict[case['name']] + if case['type'] == 'performance': + perf_metrics = await PerfResult.query_obj_all(PerfResult.task_id == task.id, + PerfResult.tone_case_id == case['tone_case_id']) + metrics = list() + for metric_info in perf_metrics: + metric = { + "metric": metric_info.metric, + "test_value": metric_info.test_value, + "cv_value": metric_info.cv_value, + "max_value": metric_info.max_value, + "min_value": metric_info.min_value, + "unit": metric_info.unit + } + metrics.append(metric) + auto_case = { + "id": case_detail.id, + "name": case['name'], + "type": Case_Type.PERFORMANCE.value, + "creator": task.owner, + "priority": '0', + "run_method": Case_Run_Method.AUTO.value, + "suite_name": case['suite_name'], + "tone_suite_name": case['tone_suite_name'], + "tone_case_name": case['tone_case_name'], + "metrics": metrics + } + result['test_result']['perf_test']['cases'].append(auto_case) + if case['type'] == 'functional': + func_cases = await FuncResult.query_obj_all(FuncResult.task_id == task.id, + FuncResult.tone_case_id == case['tone_case_id']) + for func_case in func_cases: + case_name = func_case.sub_case_name + if case_name not in de_dict: + de_dict[case_name] = '' + else: + case_name = f'task-{func_case.task_id}-{case_name}' + auto_case = { + "id": case_detail.id, + "name": case_name, + "type": Case_Type.FUNCTIONAL.value, + "result": func_case.sub_case_result, + "creator": task_dict[func_case.task_id].owner, + "priority": '0', + "run_method": Case_Run_Method.AUTO.value, + "suite_name": case['suite_name'], + "tone_suite_name": case['tone_suite_name'], + "tone_case_name": case['tone_case_name'], + "status": func_case.sub_case_result.value + } + __update_func_result_count(auto_case, result) return result