report.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.http import HttpResponse
  2. from rest_framework.views import APIView
  3. import util_doc
  4. from apps.software.models import Software
  5. class Report(APIView):
  6. authentication_classes = []
  7. # generate report
  8. @staticmethod
  9. # @RoleControl
  10. def get(request, software_id, *args, **kwargs):
  11. software = Software.objects.filter(id=software_id, delete=False)
  12. if not software:
  13. return HttpResponse(status=404, content='软件已删除或不存在')
  14. software = software[0]
  15. cases_info = {}
  16. cases = software.testcase_set.filter(delete=False)
  17. executors = set()
  18. if cases:
  19. for case in cases:
  20. state = '未执行'
  21. if case.state == 1:
  22. state = '执行成功'
  23. elif case.state == 2:
  24. state = '执行失败'
  25. cases_info[case.id_in_task] = {
  26. 'id': case.id_in_task,
  27. 'version': case.version,
  28. 'name': case.name,
  29. 'requisite': case.requisite,
  30. 'priority': case.priority,
  31. 'environment': case.environment,
  32. 'type': case.type,
  33. 'process': case.process,
  34. 'expected_result': case.expected_result,
  35. 'actual_result': case.actual_result,
  36. 'state': state,
  37. 'writer': case.writer,
  38. 'assessor': case.assessor,
  39. 'executor': case.executor,
  40. 'remark': case.remark,
  41. 'execute_time': str(case.update_time)[:10]
  42. }
  43. executors.add(case.executor)
  44. executors = " ".join(list(executors))
  45. creators = []
  46. plans = software.testplan_set.filter(delete=False)
  47. if plans:
  48. for plan in plans:
  49. creators.append(plan.creator.name)
  50. version_number = software.version_set.order_by('-create_time')[0].number
  51. file_name = '软件测试报告.docx'
  52. print(str(software.create_time).split(' ')[0])
  53. document = util_doc.process_doc(software.name, software.type, version_number, str(software.create_time)
  54. .split(' ')[0], executors, cases_info)
  55. response = HttpResponse(content_type='application/octet-stream')
  56. response['Content-Disposition'] = 'attachment; filename="{0}"'.format(file_name).encode('utf-8', 'ISO-8859-1')
  57. document.save(response)
  58. # executor, action, method = get_log(request)
  59. # gen_log(action, "测试报告", software_id+"-测试报告", method, executor)
  60. return response