81 lines
4.3 KiB
Python
81 lines
4.3 KiB
Python
|
|
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
|