from apps.project.models import Project from utils.chapter_tools.csx_chapter import create_csx_chapter_dict from utils.util import get_testType, get_case_ident # 传入项目对象、dut的类型例如'XQ'、round_str字符串表示例如第一轮为'XQ',测试项其实章节前缀例如 def create_bg_round1_zhui(project_obj: Project, dut_str='XQ', round_str='0'): """传入项目对象,返回{仅第一轮}的design_list渲染到模版的列表""" # 首先定义后面用问题单前缀 problem_prefix = "".join(['PT_', project_obj.ident, '_']) # 如果是第一轮,测试项章节号前缀则为6.2,其他轮次为4.1 demand_prefix = '6.2' if round_str == '0' else "3.1" design_list = [] round_obj = project_obj.pField.filter(key=round_str).first() # 轮次对象 case_index = 1 if round_obj: testType_list, last_chapter_items = create_csx_chapter_dict(round_obj) specific_dut = round_obj.rdField.filter(type=dut_str).first() # design的列表 if dut_str == 'XQ': so_dut = round_obj.rdField.filter(type='SO').first() if so_dut: designs = so_dut.rsField.all() for design in designs: design_dict = {'name': "/", 'chapter': "/", 'test_demand': []} # 获取一个design的所以测试项,包括关联测试项 test_items = [] test_items.extend(design.dtField.all()) test_items.extend(design.odField.all()) for test_item in test_items: key_index = int(test_item.key.split("-")[-1]) + 1 test_index = str(key_index).rjust(3, '0') reveal_ident = "_".join( ["XQ", get_testType(test_item.testType, "testType"), test_item.ident, test_index]) test_item_last_chapter = last_chapter_items[test_item.testType].index(test_item.key) + 1 test_chapter = ".".join([demand_prefix, str(testType_list.index(test_item.testType) + 1), str(test_item_last_chapter)]) test_item_dict = {'name': test_item.name, 'chapter': test_chapter, 'ident': reveal_ident, 'case_list': []} for case in test_item.tcField.all(): # 用例如果关联了问题单,那么直接判断未通过,如果没有关联问题单,则找步骤里面是否有未执行 # 如果未执行,不显示未执行,显示“/”斜杠 is_passed = '通过' problem_ident_list = [] for problem in case.caseField.all(): problem_ident_list.append("".join([problem_prefix, problem.ident])) if len(problem_ident_list) > 0: is_passed = '未通过' case_dict = { 'index': case_index, 'name': case.name, 'ident': get_case_ident(reveal_ident, case), 'passed': is_passed, 'problem_ident_list': "\a".join(problem_ident_list) } test_item_dict['case_list'].append(case_dict) case_index += 1 design_dict['test_demand'].append(test_item_dict) design_list.append(design_dict) if specific_dut: designs = specific_dut.rsField.all() for design in designs: design_dict = {'name': design.name, 'chapter': design.chapter, 'test_demand': []} # 获取一个design的所以测试项,包括关联测试项 test_items = [] test_items.extend(design.dtField.all()) test_items.extend(design.odField.all()) for test_item in test_items: key_index = int(test_item.key.split("-")[-1]) + 1 test_index = str(key_index).rjust(3, '0') reveal_ident = "_".join( ["XQ", get_testType(test_item.testType, "testType"), test_item.ident, test_index]) test_item_last_chapter = last_chapter_items[test_item.testType].index(test_item.key) + 1 test_chapter = ".".join([demand_prefix, str(testType_list.index(test_item.testType) + 1), str(test_item_last_chapter)]) test_item_dict = {'name': test_item.name, 'chapter': test_chapter, 'ident': reveal_ident, 'case_list': []} for case in test_item.tcField.all(): # 用例如果关联了问题单,那么直接判断未通过,如果没有关联问题单,则找步骤里面是否有未执行 # 如果未执行,不显示未执行,显示“/”斜杠 is_passed = '通过' problem_ident_list = [] for problem in case.caseField.all(): problem_ident_list.append("".join([problem_prefix, problem.ident])) if len(problem_ident_list) > 0: is_passed = '未通过' case_dict = { "index": case_index, 'name': case.name, 'ident': get_case_ident(reveal_ident, case), 'passed': is_passed, 'problem_ident_list': "\a".join(problem_ident_list) } test_item_dict['case_list'].append(case_dict) case_index += 1 design_dict['test_demand'].append(test_item_dict) design_list.append(design_dict) return design_list