Files
cdtestplant_v1/apps/createDocument/extensions/content_result_tool.py

81 lines
4.3 KiB
Python
Raw Normal View History

2025-04-29 18:09:00 +08:00
from apps.project.models import Project
from utils.util import *
from utils.chen_response import ChenResponse
from django.db.models import Q
def create_round_context(project_obj: Project, round_id: str):
"""根据轮次,生成测评报告中的测评结果"""
# 0. 首先定义个轮次对应中文
round_chinese = ['', '', '', '', '', '', '', '', '', '']
round_id = int(round_id)
round_str_id = str(round_id)
# 1. 首先先查询给定轮次的round对向
round_obj = project_obj.pField.filter(key=round_str_id).first()
# 如果没有轮次对象则返回错误
if not round_obj:
return ChenResponse(code=400, status=400, message='注意您没有设置第二轮测试,请添加!')
dut_qs_r2 = round_obj.rdField # 当前轮被测件dut对象qs
dut_qs_r1 = project_obj.pdField.filter(round__key=str(round_id - 1)) # 上一个轮次被测件dut对象qs
# 查询当前轮次duts是否有源代码如果没有返回错误
so_dut = dut_qs_r2.filter(type='SO').first() # 当前轮次源代码被测件对象
if not so_dut:
return ChenResponse(code=400, status=400, message='注意您某轮次没有编写源代码被测件信息,务必添加...')
# 查询上一个轮次的dut中的源代码、需求文档
r1_so_dut = dut_qs_r1.filter(type='SO').first()
# 3. 文档审查清单
doc_list = []
round_duts = round_obj.rdField.filter(Q(type='SJ') | Q(type='XQ') | Q(type='XY'))
for dut in round_duts:
dut_dict = {
'name': dut.name,
'ident': dut.ref,
'version': dut.version
}
doc_list.append(dut_dict)
# 4. 发现多少个问题,什么类型多少个问题
problems = project_obj.projField.all().distinct() # !important:大变量-项目所有问题
problems_r2 = problems.filter(case__round__key=round_str_id) # 当前轮次所有问题
# 7. 第二轮动态测试用例个数(动态测试-非静态分析、文档审查、代码审查、代码走查4个)
case_r2_qs = round_obj.rcField.filter(~Q(test__testType='2'), ~Q(test__testType='3'), ~Q(test__testType='8'),
~Q(test__testType='15')) # !warning:中变量-第一轮动态测试用例qs
testType_list, testType_count = create_str_testType_list(case_r2_qs)
## 动态测试(第一轮)各个类型测试用例执行表/各个测试需求表
demand_r2_dynamic_qs = round_obj.rtField.filter(~Q(testType='2'), ~Q(testType='3'), ~Q(testType='8'),
~Q(testType='15')) # !warning:中变量:第一轮动态测试的测试项
summary_r2_demand_info, summry_r2_demandType_info = create_demand_summary(demand_r2_dynamic_qs,
project_obj.ident)
# 8.第二轮所有动态问题统计
problems_dynamic_r2 = problems_r2.filter(~Q(case__test__testType='2'), ~Q(case__test__testType='3'),
~Q(case__test__testType='8'),
~Q(case__test__testType='15')) # !critical:大变量:第一轮动态问题单qs
problem_dynamic_r2_type_str = create_problem_type_str(problems_dynamic_r2)
problem_dynamic_r2_grade_str = create_problem_grade_str(problems_dynamic_r2)
r2_dynamic_str = "本轮测试未发现新问题。"
has_r2_dynamic = False
if len(problems_dynamic_r2) > 0:
has_r2_dynamic = True
r2_dynamic_str = (f"{round_chinese[int(round_id)]}轮动态测试共发现问题{problems_dynamic_r2.count()}个,"
f"其中{problem_dynamic_r2_type_str}"
f"{problem_dynamic_r2_grade_str}")
context = {
'project_name': project_obj.name,
'r1_so_version': r1_so_dut.version,
'so_version': so_dut.version,
'case_dynamic_r2_count': case_r2_qs.count(),
'dynamic_testType_list': ''.join(testType_list),
'dynamic_testType_count': testType_count,
'r2_exe_info_all': summary_r2_demand_info,
'r2_exe_info_type': summry_r2_demandType_info,
'has_r2_dynamic': has_r2_dynamic,
'r2_dynamic_str': r2_dynamic_str,
'round_id': round_chinese[round_id],
}
return context