1、测试记录属于测试任务的,
编写模型,在test cases子应用下。
class TestRecord(BaseModel):
ARGUMENTS_HELP = ‘json数据,支持的key有 thread_num: int 线程数 marks: str 标记 retry: int 重试次数’
task = models.ForeignKey(Task, verbose_name='测试任务', on_delete=models.PROTECT, related_name='test_records')
environment = models.ForeignKey(Environment, verbose_name='运行环境', on_delete=models.PROTECT, help_text='运行环境')
version = models.CharField('版本', max_length=64, help_text='版本')
arguments = models.JSONField('运行参数', help_text=ARGUMENTS_HELP, null=True, blank=True)
runner = models.CharField('执行者', max_length=64, help_text='执行者')
def __str__(self):
return '{}任务的运行记录'.format(self.task.name)
class Meta:
db_table = 'tb_test_record'
verbose_name = '运行记录'
verbose_name_plural = verbose_name
ordering = ['-c_time']
记得进行数据迁移
测试任务执行完还会生成详细的结果,单独创建一个测试报告子应用,用来管理测试报告,以便将来扩展分析功能就是测试报告模块
1、首先apps下创建reports子应用
然后进行注册,
2、编写reports模型,记得迁移。
3、根据测试任务,设计测试任务接口。因为是执行测试任务,设计的接口/tasks/pk/run/进行接口执行
接下来就是进行序列化编写
4、权限和任务权限一样
5、编写视图
@action(methods=[‘post’], detail=True) # ‘/tasks/pk/run/’
def run(self, request, pk):
“”"
测试任务同步执行
“”"
# 同步执行任务
# 1. 获取当前任务
task = self.get_object()
# 2. 接受前端传递的数据并创建序列化器并校验
# serializer = TestRecordSerializer(data=request.data)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# 3. 生成测试记录
test_record = serializer.save(task=task)
# 4. 准备测试数据
data = {
‘name’: task.project.name,
‘host’: test_record.environment.host,
‘test_suits’: task.get_test_suits()
}
if test_record.environment.db_config:
# 要看模型的的格式,是json,还是Chat,是Chat,需要转换
data[‘db_config’] = test_record.environment.db_config
# 5. 准备执行参数
# 不自动执行的参数, debug
args = [‘–auto=2’, ‘–debug’]
# 添加日志文件
# 测试日志文件名的格式为测试记录的id.log
logfile = settings.TEST_LOG_DIR / ‘{}.log’.format(test_record.id)
args.append(‘–logfile={}’.format(logfile))
# 执行参数,marks, thread_num
if test_record.arguments:
for key, value in test_record.arguments.items():
if value:
args.append(‘–{}={}’.format(key, value))
# 6. 执行测试
result = easytest.main(args, test_data=data).run()
# 7. 生成测试报告
report_data = {
‘record’: test_record.id,
‘status’: result[‘status’],
‘result’: result[‘test_suit_result’],
‘total_test_suit’: result[‘total_test_suit’],
‘total_test_case’: result[‘total_test_case’],
‘success_test_case’: result[‘success_test_case’],
‘fail_test_case’: result[‘fail_test_case’],
‘skip_test_case’: result[‘skip_test_case’],
‘error_test_case’: result[‘error_test_case’],
‘duration’: result[‘duration’]
}
# 把字段进行序列化,
report_serializer = ReportSerializer(data=report_data)
# 序列化进行校验
report_serializer.is_valid(raise_exception=True)
report_serializer.save()
return Response(serializer.data, status=201)
配置url进行调试。