소스 검색

添加对北斗测试的支持

刘凡 2 년 전
부모
커밋
dcf5361a8d
32개의 변경된 파일1757개의 추가작업 그리고 61개의 파일을 삭제
  1. 1 1
      TestLaboratory/settings.py
  2. 74 51
      apps/software/views/report.py
  3. 18 0
      apps/task/migrations/0005_testtask_type.py
  4. 55 0
      apps/task/migrations/0006_beidoucase.py
  5. 46 0
      apps/task/models.py
  6. 14 1
      apps/task/urls.py
  7. 223 0
      apps/task/views/beidoutask.py
  8. 65 0
      apps/task/views/beidoutaskexecute.py
  9. 220 0
      apps/task/views/beidoutasklist.py
  10. 1 1
      apps/task/views/taskview.py
  11. BIN
      db/permission.xlsx
  12. BIN
      db/role_permissions.xlsx
  13. 284 0
      logs/all-2022-11-15.log
  14. 553 0
      logs/all-2022-11-16.log
  15. 110 0
      logs/all-2022-11-17.log
  16. 0 0
      logs/error-2022-11-15.log
  17. 0 0
      logs/error-2022-11-16.log
  18. 0 0
      logs/error-2022-11-17.log
  19. 0 0
      logs/info-2022-11-15.log
  20. 0 0
      logs/info-2022-11-16.log
  21. 0 0
      logs/info-2022-11-17.log
  22. 89 7
      mysql-init/TestLaboratory.sql
  23. BIN
      static/plan-statement/TestLaboratory_V1_Plan_1/2022-11-17 09:48:04.904191/2021.6.5班会.docx
  24. BIN
      static/software/2022-11-16 21:38:39.498105/beidou专用-全部测试用例.xls
  25. BIN
      static/software/TestLaboratory_V1_Software_1/TestLaboratory_V1_Version_1/2022-11-15 20:46:03.640645/2021.6.5班会.docx
  26. BIN
      static/software/TestLaboratory_V1_Software_1/TestLaboratory_V1_Version_1/2022-11-17 09:47:48.686593/2021.6.5班会.docx
  27. BIN
      static/task-statement/TestLaboratory_V1_Task_1/2022-11-17 09:49:47.026514/2021.6.5班会.docx
  28. 0 0
      static/task-statement/TestLaboratory_V1_Task_2/2022-11-17 09:49:47.037050/2021.6.5班会.docx
  29. BIN
      static/task-statement/TestLaboratory_V1_Task_3/2022-11-17 00:30:46.953334/2021.6.5班会.docx
  30. BIN
      static/task-statement/TestLaboratory_V1_Task_3/2022-11-17 00:31:09.261699/2021.6.5班会.docx
  31. 0 0
      static/task-statement/TestLaboratory_V1_Task_4/2022-11-17 00:31:09.269277/2021.6.5班会.docx
  32. 4 0
      test.py

+ 1 - 1
TestLaboratory/settings.py

@@ -30,7 +30,7 @@ CASE_TEMPLATE_ROOT = 'static/case-template/测试用例模版.xlsx'
 CASE_FILE_ROOT = 'static/case-file/'
 CASE_FILE_EXPORT = 'static/case-file-export/'
 USER_FILE_ROOT = 'static/user-file-export/'
-HTTP_HEAD = 'http://172.26.0.14:8003/'
+HTTP_HEAD = 'http://47.110.247.58:8003/'
 
 
 # Quick-start development settings - unsuitable for production

+ 74 - 51
apps/software/views/report.py

@@ -1,16 +1,34 @@
+import datetime
+import os
+
 from django.http import HttpResponse
 from rest_framework.views import APIView
 
 import util_doc
+from TestLaboratory.settings import SOFTWARE_ROOT
 from apps.software.models import Software
 
 import logging
+
+from apps.task.models import BeidouCase
+from apps.user.models import User
+from util_xlsx import write_to_xlsx
+
 logger = logging.getLogger('django')
 
 
 class Report(APIView):
     authentication_classes = []
 
+    @staticmethod
+    def convert_to_string(word_list):
+        for i in range(len(word_list)):
+            if word_list[i] is None:
+                word_list[i] = ''
+            elif not isinstance(word_list[i], str):
+                word_list[i] = str(word_list[i])
+        return word_list
+
     # generate report
     @staticmethod
     # @RoleControl
@@ -21,57 +39,62 @@ class Report(APIView):
             return HttpResponse(status=404, content='软件已删除或不存在')
         software = software[0]
 
-        executor_id = request.GET.get('executor_id')
-        if not executor_id:
-            logger.error("测试人员id不能为空")
-            return HttpResponse(status=404, content="测试人员id不能为空")
-        cases_info = {}
-        cases = software.testcase_set.filter(executor_id=executor_id, delete=False)
-        executors = set()
-        if cases:
-            for case in cases:
-                state = '未执行'
-                if case.state == 1:
-                    state = '执行成功'
-                elif case.state == 2:
-                    state = '执行失败'
-                cases_info[case.id_in_task] = {
-                    'id': case.id_in_task,
-                    'version': case.version,
-                    'name': case.name,
-                    'requisite': case.requisite,
-                    'priority': case.priority,
-                    'environment': case.environment,
-                    'type': case.type,
-                    'process': case.process,
-                    'expected_result': case.expected_result,
-                    'actual_result': case.actual_result,
-                    'state': state,
-                    'writer': case.writer,
-                    'assessor': case.assessor,
-                    'executor': case.executor,
-                    'remark': case.remark,
-                    'execute_time': str(case.update_time)[:10]
-                }
-                executors.add(case.executor)
-
-        creators = []
-        plans = software.testplan_set.filter(delete=False)
-        if plans:
-            for plan in plans:
-                creators.append(plan.creator.name)
-
-        version_number = software.version_set.order_by('-create_time')[0].number
-
-        file_name = '软件测试报告.docx'
-        print(str(software.create_time).split(' ')[0])
-        document = util_doc.process_doc(software.name, software.type, version_number, str(software.create_time)
-                                        .split(' ')[0], executors, cases_info)
-
-        response = HttpResponse(content_type='application/octet-stream')
-        response['Content-Disposition'] = 'attachment; filename="{0}"'.format(file_name).encode('utf-8', 'ISO-8859-1')
-        document.save(response)
+        beidou_cases = BeidouCase.objects.order_by('-create_time')
+
+        beidou_cases = beidou_cases.filter(software_id=software_id)
+
+        version = request.GET.get('version')
+        if version:
+            beidou_cases = beidou_cases.filter(version=version)
+
+        export_type = request.GET.get('export_type')
+
+        file_name = software.name + '-全部测试用例.xls'
+        if export_type:
+            if export_type == '2':
+                file_name = software.name + '-不合格测试用例.xls'
+                beidou_cases = beidou_cases.filter(state=2)
+
+        if not beidou_cases:
+            logger.error("无符合要求的测试用例")
+            return HttpResponse(status=404, content='无符合要求的测试用例')
+
+        update_time = datetime.datetime.now()
+        file_dir = SOFTWARE_ROOT + "/" + str(update_time)
+        if not os.path.exists(file_dir):
+            os.makedirs(file_dir)
+        file_path = file_dir + "/" + file_name
+
+        cases_info = [
+            ['测试项目', '版本', '测试内容', '定位精度', '定时精度', '伪距测量精度', '载波测量精度', '测速精度',
+             '捕获灵敏度', '接收灵敏度', '跟踪灵敏度', '功率范围', '自主完好性', '系统完好性', '首次捕获时间',
+             '失锁重捕时间', '定位测速更新率', '跟踪通道数', '最大速度', '最大加速度', '执行结果', '测试人员', '备注']]
+
+        for case in beidou_cases:
+            power = ''
+            if case.power_range_low and case.power_range_high:
+                power = str(case.power_range_low) + '-' + str(case.power_range_high)
+            state = '成功'
+            if case.state == 2:
+                state = '失败'
+            executor_name = User.objects.filter(id=case.executor_id)[0].username
+
+            cases_info.append(Report.convert_to_string(
+                [software.name, case.version, case.title, case.positioning_accuracy, case.timing_accuracy,
+                 case.pseudo_range_measurement_accuracy, case.carrier_measurement_accuracy,
+                 case.speed_measurement_accuracy, case.sensitivity_capture, case.receiving_sensitivity,
+                 case.sensitivity_track, power, case.self_integrity, case.system_integrity, case.capture_time,
+                 case.recapture_time, case.update_rate, case.trace_channels, case.max_velocity, case.max_acceleration,
+                 state, executor_name, case.remark]
+            ))
 
+        sio = write_to_xlsx(file_path, cases_info)
+        sio.seek(0)
+        response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel')
+        # response['Content-Disposition'] = 'attachment; filename*=UTF-8''{}'.format(escape_uri_path(file_name))
+        response['Content-Disposition'] = 'attachment; filename="{0}"'.format(file_name).encode('utf-8',
+                                                                                                'ISO-8859-1')
+        response.write(sio.getvalue())
         # executor, action, method = get_log(request)
-        # gen_log(action, "测试报告", software_id+"-测试报告", method, executor)
+        # gen_log(action, "测试任务", task.title, method, executor)
         return response

+ 18 - 0
apps/task/migrations/0005_testtask_type.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.4 on 2022-11-15 10:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('task', '0004_alter_testcase_id'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='testtask',
+            name='type',
+            field=models.CharField(default='other', max_length=30, verbose_name='测试任务类型'),
+        ),
+    ]

+ 55 - 0
apps/task/migrations/0006_beidoucase.py

@@ -0,0 +1,55 @@
+# Generated by Django 3.2.4 on 2022-11-15 20:23
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('user', '0003_remove_user_group'),
+        ('software', '0003_auto_20221004_2044'),
+        ('task', '0005_testtask_type'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='BeidouCase',
+            fields=[
+                ('id', models.CharField(default='TestLaboratory_V1_BeidouCase_1', max_length=128, primary_key=True, serialize=False, unique=True, verbose_name='测试用例编号')),
+                ('version', models.CharField(max_length=30, null=True, verbose_name='软件版本')),
+                ('title', models.CharField(max_length=50, verbose_name='测试用例名称')),
+                ('state', models.IntegerField(default=0, verbose_name='状态')),
+                ('positioning_accuracy', models.FloatField(null=True, verbose_name='定位精度')),
+                ('timing_accuracy', models.FloatField(null=True, verbose_name='定时精度')),
+                ('pseudo_range_measurement_accuracy', models.FloatField(null=True, verbose_name='伪距测量精度')),
+                ('carrier_measurement_accuracy', models.FloatField(null=True, verbose_name='载波测量精度')),
+                ('speed_measurement_accuracy', models.FloatField(null=True, verbose_name='测速精度')),
+                ('sensitivity_capture', models.FloatField(null=True, verbose_name='捕获灵敏度')),
+                ('receiving_sensitivity', models.FloatField(null=True, verbose_name='接受灵敏度')),
+                ('sensitivity_track', models.FloatField(null=True, verbose_name='跟踪灵敏度')),
+                ('power_range_low', models.FloatField(null=True, verbose_name='接收功率范围下界')),
+                ('power_range_high', models.FloatField(null=True, verbose_name='接收功率范围上界')),
+                ('self_integrity', models.FloatField(null=True, verbose_name='自主完好性')),
+                ('system_integrity', models.FloatField(null=True, verbose_name='系统完好性')),
+                ('capture_time', models.FloatField(null=True, verbose_name='首次捕获时间')),
+                ('recapture_time', models.FloatField(null=True, verbose_name='失锁重捕时间')),
+                ('update_rate', models.FloatField(null=True, verbose_name='定位测速更新率')),
+                ('trace_channels', models.IntegerField(null=True, verbose_name='跟踪通道数')),
+                ('max_velocity', models.FloatField(null=True, verbose_name='最大速度')),
+                ('max_acceleration', models.FloatField(null=True, verbose_name='最大加速度')),
+                ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
+                ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
+                ('delete', models.BooleanField(default=False)),
+                ('remark', models.TextField(null=True, verbose_name='备注')),
+                ('executor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='user.user', verbose_name='执行者id')),
+                ('software', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='software.software', verbose_name='测试软件')),
+                ('task', models.ForeignKey(default='TestLaboratory_V1_Task_1', on_delete=django.db.models.deletion.CASCADE, to='task.testtask', verbose_name='测试用例所在测试任务')),
+            ],
+            options={
+                'verbose_name': '北斗测试用例',
+                'verbose_name_plural': '北斗测试用例',
+                'db_table': 'beidou_case',
+            },
+        ),
+    ]

+ 46 - 0
apps/task/models.py

@@ -13,6 +13,7 @@ class TestTask(models.Model):
     executor = models.ForeignKey(User, null=True, on_delete=models.CASCADE, verbose_name='测试任务执行者')
     # 0: 发布,release;(此阶段可以上传未执行的测试用例)1:执行测试用例,execute(此阶段需上传包含测试结果的测试用例);2:执行完成
     state = models.IntegerField(verbose_name='测试任务状态')
+    type = models.CharField(max_length=30, default='other', verbose_name='测试任务类型')
     description = models.TextField(verbose_name='测试任务描述')
     plan = models.ForeignKey(TestPlan, on_delete=models.CASCADE, verbose_name='测试任务所属计划')
     statement_file = models.TextField(verbose_name='说明文档id文件')
@@ -67,3 +68,48 @@ class TestCase(models.Model):
         verbose_name = '测试用例'
         verbose_name_plural = verbose_name
         db_table = 'test_case'
+
+
+class BeidouCase(models.Model):
+    id = models.CharField(max_length=128, unique=True, primary_key=True, verbose_name='测试用例编号',
+                          default='TestLaboratory_V1_BeidouCase_1')
+    task = models.ForeignKey(TestTask, on_delete=models.CASCADE, verbose_name='测试用例所在测试任务',
+                             default='TestLaboratory_V1_Task_1')
+    software = models.ForeignKey(Software, null=True, on_delete=models.CASCADE, verbose_name='测试软件')
+    executor = models.ForeignKey(User, null=True, on_delete=models.CASCADE, verbose_name='执行者id')
+    version = models.CharField(max_length=30, null=True, verbose_name='软件版本')
+
+    title = models.CharField(max_length=50, verbose_name='测试用例名称')
+    state = models.IntegerField(verbose_name='状态', default=0)
+
+    positioning_accuracy = models.FloatField(null=True, verbose_name='定位精度')
+    timing_accuracy = models.FloatField(null=True, verbose_name='定时精度')
+    pseudo_range_measurement_accuracy = models.FloatField(null=True, verbose_name='伪距测量精度')
+    carrier_measurement_accuracy = models.FloatField(null=True, verbose_name='载波测量精度')
+    speed_measurement_accuracy = models.FloatField(null=True, verbose_name='测速精度')
+    sensitivity_capture = models.FloatField(null=True, verbose_name='捕获灵敏度')
+    receiving_sensitivity = models.FloatField(null=True, verbose_name='接受灵敏度')
+    sensitivity_track = models.FloatField(null=True, verbose_name='跟踪灵敏度')
+    power_range_low = models.FloatField(null=True, verbose_name='接收功率范围下界')
+    power_range_high = models.FloatField(null=True, verbose_name='接收功率范围上界')
+    self_integrity = models.FloatField(null=True, verbose_name='自主完好性')
+    system_integrity = models.FloatField(null=True, verbose_name='系统完好性')
+    capture_time = models.FloatField(null=True, verbose_name='首次捕获时间')
+    recapture_time = models.FloatField(null=True, verbose_name='失锁重捕时间')
+    update_rate = models.FloatField(null=True, verbose_name='定位测速更新率')
+    trace_channels = models.IntegerField(null=True, verbose_name='跟踪通道数')
+    max_velocity = models.FloatField(null=True, verbose_name='最大速度')
+    max_acceleration = models.FloatField(null=True, verbose_name='最大加速度')
+
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+    update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
+    delete = models.BooleanField(default=False)
+    remark = models.TextField(null=True, verbose_name='备注')
+
+    def __str__(self):
+        return self.title
+
+    class Meta:
+        verbose_name = '北斗测试用例'
+        verbose_name_plural = verbose_name
+        db_table = 'beidou_case'

+ 14 - 1
apps/task/urls.py

@@ -1,10 +1,23 @@
 from django.urls import path
 from .views import tasklistview, taskview, caseview
+from .views.beidoutask import BeidouTaskEditView, BeidouTaskView
+from .views.beidoutaskexecute import BeidouCaseExecuteView
+from .views.beidoutasklist import BeidouTaskCreateView, BeidouTaskListView, BeidouTaskInfoView
+
 
 urlpatterns = [
     path('', tasklistview.TaskListView.as_view()),
+
+    # beidou
+    path('beidou', BeidouTaskCreateView.as_view()),
+    path('beidou/list', BeidouTaskListView.as_view()),
+    path('beidou/info', BeidouTaskInfoView.as_view()),
+    path('beidou/edit', BeidouTaskEditView.as_view()),
+    path('beidou/<str:task_id>', BeidouTaskView.as_view()),
+    path('beidou/<str:task_id>/execute', BeidouCaseExecuteView.as_view()),
+
     path('<str:task_id>', taskview.TaskView.as_view()),
     path('<str:task_id>/edit', taskview.TaskEdit.as_view()),
     path('<str:task_id>/case-file', caseview.CaseView.as_view()),
-    path('<str:task_id>/case-file/execute', caseview.CaseExecute.as_view())
+    path('<str:task_id>/case-file/execute', caseview.CaseExecute.as_view()),
 ]

+ 223 - 0
apps/task/views/beidoutask.py

@@ -0,0 +1,223 @@
+import datetime
+
+from rest_framework.response import Response
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+from TestLaboratory.settings import TASK_ROOT, CASE_TEMPLATE_ROOT, HTTP_HEAD, PLAN_ROOT, CASE_FILE_ROOT, SOFTWARE_ROOT
+from apps.file.models import FileManager
+from apps.log.models import get_log, gen_log
+from apps.plan.models import TestPlan
+from apps.task.models import TestTask, TestCase, BeidouCase
+from apps.user.middleware.rolecontrol import RoleControl
+from apps.user.models import User
+from utils.util_add_id import get_id
+from utils.util_file.util_fileio import write_file
+
+import logging
+logger = logging.getLogger('django')
+
+
+def model_to_dict(model_obj, ignore=()):
+    '''
+    将一个model对象转换成字典
+
+    '''
+    att_dict = {}
+    for field in model_obj._meta.fields:
+        name = field.attname  # 获取字段名
+        value = getattr(model_obj, name)  # 获取对象属性
+        if name in ignore:
+            continue
+        # print(name,value)
+        # 检查传入的数据能否被序列化
+        if isinstance(value, (int, float)) and name not in ['delete']:
+            att_dict[name] = value  # 生成字典
+    return att_dict
+
+
+class BeidouTaskEditView(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create task
+    @staticmethod
+    @RoleControl
+    def post(request, task_id=None, *args, **kwargs):
+        task_name_old = request.POST.get('task_name_old')
+        task_name_new = request.POST.get('task_name_new')
+        description = request.POST.get('description')
+        statement_files = request.FILES.getlist('files')
+        plan_id = request.POST.get('plan_id')
+
+        # step1:判断所属软件及版本是否存在
+        plan = TestPlan.objects.filter(id=plan_id, delete=False)
+        if not plan:
+            logger.error("测试计划已删除或不存在")
+            return HttpResponse(status=404, content='测试计划已删除或不存在')
+
+        task_all = TestTask.objects.filter(plan_id=plan_id, title=task_name_old)
+        if not task_all:
+            logger.error("测试任务不存在")
+            return HttpResponse(status=404, content='测试任务不存在')
+
+        for task in task_all.all():
+            if task_name_new:
+                task.title = task_name_new
+            if description:
+                task.description = description
+
+            fids = ''
+            for file in statement_files:
+                create_time = update_time = datetime.datetime.now()
+                try:
+                    write_file(file,
+                               TASK_ROOT + "/" + task.id + "/" + str(create_time))
+                except:
+                    logger.error("文件上传失败")
+                    return HttpResponse(status=500, content="文件上传失败")
+
+                id_file = get_id(FileManager, "TestLaboratory_V1_File_1")
+
+                try:
+                    file_new = FileManager.objects.create(id=id_file,
+                                                          category="plan_statement",
+                                                          path=task.id + "/" + str(
+                                                              create_time) + "/" + file.name,
+                                                          create_time=create_time,
+                                                          update_time=update_time)
+                except:
+                    logger.error("文件路径写入数据库失败")
+                    return HttpResponse(status=500, content="文件路径写入数据库失败")
+                fids += id_file + '&&'
+            fids = fids[:-2]
+
+            task_sids = task.statement_file.split('&&')
+
+            if task_sids is not None and task_sids[0] != '':
+                for statement_id in task_sids:
+                    statement = FileManager.objects.get(id=statement_id)
+                    statement.delete = True
+                    statement.save()
+
+            task.statement_file = fids
+            task.save()
+
+        executor, action, method = get_log(request)
+        gen_log(action, "北斗测试任务", task_name_new, method, executor)
+
+        return HttpResponse("编辑已保存")
+
+    @staticmethod
+    @RoleControl
+    def delete(request, *args, **kwargs):
+        task_name = request.POST.get('task_name')
+        plan_id = request.POST.get('plan_id')
+
+        # step1:判断所属软件及版本是否存在
+        plan = TestPlan.objects.filter(id=plan_id, delete=False)
+        if not plan:
+            logger.error("测试计划已删除或不存在")
+            return HttpResponse(status=404, content='测试计划已删除或不存在')
+
+        task_all = TestTask.objects.filter(plan_id=plan_id, title=task_name)
+        if not task_all:
+            logger.error("测试任务已删除或不存在")
+            return HttpResponse(status=404, content='测试任务已删除或不存在')
+
+        for task in task_all.all():
+            task_sids = task.statement_file.split('&&')
+
+            if task_sids[0]:
+                for statement_id in task_sids:
+                    statement = FileManager.objects.get(id=statement_id)
+                    statement.delete = True
+                    statement.save()
+            task.delete = True
+            task.save()
+        executor, action, method = get_log(request)
+        gen_log(action, "北斗测试任务", task.title, method, executor)
+        return HttpResponse("删除完成")
+
+
+class BeidouTaskView(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create task
+    @staticmethod
+    @RoleControl
+    def get(request, task_id=None, *args, **kwargs):
+        task = TestTask.objects.filter(id=task_id, delete=False)
+        if not task:
+            logger.error("测试计划已删除或不存在")
+            return HttpResponse(status=404, content='测试计划已删除或不存在')
+        task = task[0]
+
+        version = task.plan.software.version_set.filter(number=task.plan.version, delete=False)
+        if not version:
+            logger.error("测试任务对应软件版本不存在或已删除")
+            return HttpResponse(status=404, content='测试任务对应软件版本不存在或已删除')
+        version = version[0]
+
+        version_fid = version.version_file
+        version_file = FileManager.objects.filter(id=version_fid)
+        if not version_file:
+            logger.error("无法定位测试任务对应的软件实体")
+            return HttpResponse(status=404, content='无法定位测试任务对应的软件实体')
+        version_file = version_file[0]
+
+        plan_sids = task.plan.statement_file.split('&&')
+        plan_file_names = []
+        plan_file_urls = []
+        if plan_sids[0]:
+            for plan_statement_id in plan_sids:
+                plan_statement = FileManager.objects.get(id=plan_statement_id)
+                plan_file_urls.append(PLAN_ROOT + plan_statement.path)
+                plan_file_names.append(plan_statement.path.split('/')[-1])
+
+        task_sids = task.statement_file.split('&&')
+        task_file_names = []
+        task_file_urls = []
+        if task_sids[0]:
+            for task_statement_id in task_sids:
+                task_statement = FileManager.objects.get(id=task_statement_id)
+                task_file_urls.append(TASK_ROOT + task_statement.path)
+                task_file_names.append(task_statement.path.split('/')[-1])
+
+        case_info = {}
+        beidou_case = BeidouCase.objects.filter(task_id=task_id)
+        if beidou_case:
+            beidou_case = beidou_case[0]
+            case_info = model_to_dict(beidou_case)
+
+        return Response({
+            'software_id': task.plan.software.id,
+            'software_name': task.plan.software.name,
+            'version': task.plan.version,
+            'version_file': {'file_name': version_file.path.split('/')[-1], 'file_url': HTTP_HEAD + SOFTWARE_ROOT
+                                                                                        + version_file.path},
+            'plan': {
+                'id': task.plan.id,
+                'title': task.plan.title,
+                'description': task.plan.description,
+                'state': task.plan.state,
+                'statements': [{'file_id': file_sid, 'file_name': file_name, 'file_url': HTTP_HEAD + file_url} for
+                               file_sid, file_name, file_url in zip(plan_sids, plan_file_names, plan_file_urls)],
+                'creator': {'executor_id': task.plan.creator.id, 'executor_name': task.plan.creator.username},
+            },
+            'task': {
+                'id': task.id,
+                'title': task.title,
+                'description': task.description,
+                'state': task.state,
+                'statements': [{'file_id': file_sid, 'file_name': file_name, 'file_url': HTTP_HEAD + file_url} for
+                               file_sid, file_name, file_url in zip(task_sids, task_file_names, task_file_urls)],
+                'executor': {'id': task.executor.id, 'name': task.executor.username},
+                'result': case_info
+            },
+            'create_time': task.create_time,
+            'update_time': task.update_time,
+        })
+
+

+ 65 - 0
apps/task/views/beidoutaskexecute.py

@@ -0,0 +1,65 @@
+import datetime
+import os
+
+from django.db.models import Q
+from django.http import HttpResponse, HttpResponseBadRequest
+from rest_framework.response import Response
+from rest_framework.views import APIView
+
+from TestLaboratory.settings import CASE_FILE_ROOT, CASE_FILE_EXPORT, HTTP_HEAD
+from apps.file.models import FileManager
+from apps.log.models import get_log, gen_log
+from apps.task.models import TestTask, TestCase, BeidouCase
+from apps.user.middleware.rolecontrol import RoleControl
+from util_xlsx import load_xlsx, write_to_xlsx
+from utils.util_add_id import get_id
+from utils.util_file.util_fileio import write_file
+
+import logging
+logger = logging.getLogger('django')
+
+
+class BeidouCaseExecuteView(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # execute task
+    @staticmethod
+    @RoleControl
+    def post(request, task_id, *args, **kwargs):
+        executor, action, method = get_log(request)
+        task = TestTask.objects.filter(id=task_id, delete=False)
+        if not task:
+            logger.error("测试任务已删除或不存在")
+            return HttpResponseBadRequest(status=404, content='测试任务已删除或不存在')
+        task = task[0]
+        print(task.id)
+
+        params_dict = request.POST.dict()
+        for key in params_dict.keys():
+            if key == 'trace_channels' or key == 'state':
+                params_dict[key] = int(params_dict[key])
+            elif key != 'remark':
+                params_dict[key] = float(params_dict[key])
+        create_time = update_time = datetime.datetime.now()
+
+        beidou_case = BeidouCase.objects.filter(task_id=task_id)
+        if beidou_case:
+            params_dict['update_time'] = update_time
+            BeidouCase.objects.filter(task_id=task_id, executor_id=task.executor_id, delete=False).update(**params_dict)
+        else:
+            params_dict['task_id'] = task_id
+            params_dict['title'] = task.title
+            params_dict['id'] = get_id(BeidouCase, "TestLaboratory_V1_BeidouCase_1")
+            params_dict['create_time'] = create_time
+            params_dict['update_time'] = update_time
+            params_dict['executor_id'] = task.executor_id
+            params_dict['software_id'] = task.plan.software.id
+            params_dict['version'] = task.plan.version
+
+            BeidouCase.objects.create(**params_dict)
+        task.state = 2
+        task.save()
+
+        gen_log(action, "北斗测试任务", task.title, method, executor)
+        return HttpResponse("执行成功")

+ 220 - 0
apps/task/views/beidoutasklist.py

@@ -0,0 +1,220 @@
+import datetime
+import functools
+
+from rest_framework.response import Response
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+from TestLaboratory.settings import TASK_ROOT, CASE_TEMPLATE_ROOT, HTTP_HEAD
+from apps.file.models import FileManager
+from apps.log.models import get_log, gen_log
+from apps.plan.models import TestPlan
+from apps.task.models import TestTask, TestCase
+from apps.user.middleware.rolecontrol import RoleControl
+from apps.user.models import User
+from utils.util_add_id import get_id
+from utils.util_file.util_fileio import write_file
+
+import logging
+logger = logging.getLogger('django')
+
+
+class BeidouTaskCreateView(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create task
+    @staticmethod
+    @RoleControl
+    def post(request, *args, **kwargs):
+        plan_id = request.POST.get('plan_id')
+        title = request.POST.get('task_name')
+        description = request.POST.get('description')
+        executors_id = request.POST.get('executors').split('&&')
+        statement_files = request.FILES.getlist('files')
+        task_type = request.POST.get('type')
+
+        # step1:判断所属软件及版本是否存在
+        plan = TestPlan.objects.filter(id=plan_id, delete=False)
+        if not plan:
+            logger.error("测试计划已删除或不存在")
+            return HttpResponse(status=404, content='测试计划已删除或不存在')
+
+        task = TestTask.objects.filter(plan_id=plan_id, title=title)
+        if task:
+            logger.error("测试任务已存在,请重新命名")
+            return HttpResponse(status=404, content='测试任务已存在,请重新命名')
+
+        # step1:创建文件的数据库字段
+        fids = ''
+        file_paths = []
+        file_ids = []
+        for file in statement_files:
+            create_time = update_time = datetime.datetime.now()
+            try:
+                write_file(file, TASK_ROOT + "/" + str(create_time))
+            except:
+                logger.error("文件上传失败")
+                return HttpResponse(status=500, content="文件上传失败")
+
+            id_file = get_id(FileManager, "TestLaboratory_V1_File_1")
+
+            try:
+                file_new = FileManager.objects.create(id=id_file, category="plan_statement",
+                                                      path=str(create_time) + "/" + file.name,
+                                                      create_time=create_time,
+                                                      update_time=update_time)
+            except:
+                logger.error("文件路径写入数据库失败")
+                return HttpResponse(status=500, content="文件路径写入数据库失败")
+            file_ids.append(id_file)
+            file_paths.append(TASK_ROOT + file_new.path)
+            fids += id_file + '&&'
+        fids = fids[:-2]
+
+        create_time = update_time = datetime.datetime.now()
+        return_value = []
+        for executor_id in executors_id:
+            executor = User.objects.filter(id=executor_id, delete=False)
+            if not executor:
+                logger.error("执行者用户不存在")
+                return HttpResponse(status=404, content='执行者用户不存在')
+
+            task_id = get_id(TestTask, 'TestLaboratory_V1_Task_1')
+            task = TestTask.objects.create(id=task_id, title=title, description=description, state=0, plan_id=plan_id,
+                                           statement_file=fids, executor_id=executor_id, type=task_type,
+                                           create_time=create_time, update_time=update_time)
+            return_value.append({
+                'software_id': task.plan.software.id,
+                'software_name': task.plan.software.name,
+                'version': task.plan.version,
+                'id': task.id,
+                'executor_id': executor_id,
+                'title': title,
+                'description': description,
+                'type': task_type,
+                'state': task.state,
+                'files': [{'file_id': id_file, 'file_name': file.name, 'file_url': HTTP_HEAD + file_path} for
+                          (id_file, file, file_path)
+                          in zip(file_ids, statement_files, file_paths)],
+            })
+        executor, action, method = get_log(request)
+        gen_log(action, "北斗测试任务", task.title, method, executor)
+        return Response(return_value)
+
+
+class BeidouTaskListView(APIView):
+    authentication_classes = []
+
+    @staticmethod
+    @RoleControl
+    def get(request, *args, **kwargs):
+        title = request.GET.get('task_name')
+        plan_id = request.GET.get('plan_id')
+        software_id = request.GET.get('software_id')
+        sort = request.GET.get('sort')
+
+        task_all = TestTask.objects.order_by('-create_time')
+        if title:
+            task_all = task_all.filter(title__contains=title)
+        if software_id:
+            task_all = task_all.filter(plan__software__id=software_id)
+        if plan_id:
+            task_all = task_all.filter(plan__id=plan_id)
+        """
+        sort=update_time, -update_time, create_time, -create_time, title, -title, state
+        """
+        if sort:
+            task_all = task_all.order_by(sort)
+        task_all = task_all.filter(delete=False)
+
+        if not task_all:
+            return Response([])
+
+        info = list()
+        for task in task_all.all():
+            info.append({
+                'software_id': task.plan.software.id,
+                'software_name': task.plan.software.name,
+                'version': task.plan.version,
+                'plan_id': task.plan.id,
+                'plan_name': task.plan.title,
+                'title': task.title,
+                'description': task.description,
+                'type': task.type,
+            })
+        info = functools.reduce(lambda x, y: y in x and x or x + [y], info, [])
+        for i in range(len(info)):
+            info[i]['task_id'] = 'TestLaboratory_V1_Task_1'
+
+        return Response(info)
+
+
+class BeidouTaskInfoView(APIView):
+    authentication_classes = []
+
+    @staticmethod
+    @RoleControl
+    def get(request, *args, **kwargs):
+        title = request.GET.get('task_name')
+        plan_id = request.GET.get('plan_id')
+        software_id = request.GET.get('software_id')
+        state = request.GET.get('state')
+        executor_id = request.GET.get('executor_id')
+        task_type = request.GET.get('type')
+        sort = request.GET.get('sort')
+
+        task_all = TestTask.objects.order_by('-create_time')
+        if title:
+            task_all = task_all.filter(title__contains=title)
+        if software_id:
+            task_all = task_all.filter(plan__software__id=software_id)
+        if plan_id:
+            task_all = task_all.filter(plan__id=plan_id)
+        if state:
+            task_all = task_all.filter(state=state)
+        if executor_id:
+            task_all = task_all.filter(executor_id=executor_id)
+        if task_type:
+            task_all = task_all.filter(type=task_type)
+        """
+        sort=update_time, -update_time, create_time, -create_time, title, -title, state
+        """
+        if sort:
+            task_all = task_all.order_by(sort)
+        task_all = task_all.filter(delete=False)
+
+        if not task_all:
+            return Response([])
+
+        info = list()
+        for task in task_all.all():
+            task_sids = task.statement_file.split('&&')
+            task_file_names = []
+            task_file_urls = []
+            if task_sids[0]:
+                for task_statement_id in task_sids:
+                    task_statement = FileManager.objects.get(id=task_statement_id)
+                    task_file_urls.append(TASK_ROOT + task_statement.path)
+                    task_file_names.append(task_statement.path.split('/')[-1])
+
+            info.append({
+                'software_id': task.plan.software.id,
+                'software_name': task.plan.software.name,
+                'version': task.plan.version,
+                'plan_id': task.plan.id,
+                'plan_name': task.plan.title,
+                'id': task.id,
+                'title': task.title,
+                'description': task.description,
+                'type': task.type,
+                'state': task.state,
+                'statements': [{'file_id': file_sid, 'file_name': file_name, 'file_url': HTTP_HEAD + file_url} for
+                               file_sid, file_name, file_url in zip(task_sids, task_file_names, task_file_urls)],
+                'executor_id': task.executor.id,
+                'executor_name': task.executor.username,
+                'create_time': task.create_time,
+                'update_time': task.update_time,
+            })
+        return Response(list(info))
+

+ 1 - 1
apps/task/views/taskview.py

@@ -164,7 +164,7 @@ class TaskEdit(APIView):
             create_time = update_time = datetime.datetime.now()
             try:
                 write_file(file,
-                           PLAN_ROOT + "/" + task_id + "/" + str(create_time))
+                           TASK_ROOT + "/" + task_id + "/" + str(create_time))
             except:
                 logger.error("文件上传失败")
                 return HttpResponse(status=500, content="文件上传失败")

BIN
db/permission.xlsx


BIN
db/role_permissions.xlsx


+ 284 - 0
logs/all-2022-11-15.log

@@ -0,0 +1,284 @@
+[INFO] [2022-11-15 20:41:18,695] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-15 20:44:46,594] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 292
+[INFO] [2022-11-15 20:45:04,444] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software HTTP/1.1" 301 0
+[WARNING] [2022-11-15 20:45:04,447] [log.py:224] [log:log_response] - Forbidden: /api/v1/software/
+[WARNING] [2022-11-15 20:45:04,447] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software/ HTTP/1.1" 403 43
+[INFO] [2022-11-15 20:45:32,409] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software HTTP/1.1" 301 0
+[INFO] [2022-11-15 20:45:32,434] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software/ HTTP/1.1" 200 2
+[ERROR] [2022-11-15 20:45:56,037] [softwarelistview.py:31] [softwarelistview:post] - 软件上传失败
+[WARNING] [2022-11-15 20:45:56,037] [log.py:224] [log:log_response] - Not Found: /api/v1/software/
+[WARNING] [2022-11-15 20:45:56,037] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/software/ HTTP/1.1" 404 18
+[INFO] [2022-11-15 20:46:03,676] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/software/ HTTP/1.1" 200 161
+[INFO] [2022-11-15 20:47:27,946] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-plans/ HTTP/1.1" 200 281
+[INFO] [2022-11-15 20:47:36,639] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-plans HTTP/1.1" 301 0
+[INFO] [2022-11-15 20:47:36,655] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-plans/ HTTP/1.1" 200 348
+[WARNING] [2022-11-15 20:52:35,402] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:52:35,403] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:52:46,282] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:52:46,619] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:52:52,083] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:52:52,084] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:53:35,053] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:53:35,361] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:53:37,289] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:53:37,289] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:54:15,921] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:54:16,207] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:54:18,372] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:54:18,372] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:54:34,135] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:54:34,393] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:54:35,777] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou/
+[WARNING] [2022-11-15 20:54:35,777] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/ HTTP/1.1" 404 4703
+[WARNING] [2022-11-15 20:55:34,732] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:55:34,733] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:55:51,294] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:55:51,644] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:55:54,416] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:55:54,416] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[WARNING] [2022-11-15 20:57:16,859] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:57:16,860] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:58:26,785] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:58:27,052] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:58:28,542] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:58:28,542] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 20:58:44,976] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 20:58:45,261] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 20:58:46,723] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:58:46,723] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[WARNING] [2022-11-15 20:58:51,744] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou/
+[WARNING] [2022-11-15 20:58:51,745] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/ HTTP/1.1" 404 4703
+[WARNING] [2022-11-15 20:58:57,261] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou/
+[WARNING] [2022-11-15 20:58:57,261] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/ HTTP/1.1" 404 4703
+[WARNING] [2022-11-15 20:59:08,336] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-15 20:59:08,337] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 405 41
+[INFO] [2022-11-15 21:00:16,294] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/urls.py changed, reloading.
+[INFO] [2022-11-15 21:00:16,563] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:00:30,343] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py", line 33, in post
+    executors_id = request.POST.get('executors').split('&&')
+AttributeError: 'NoneType' object has no attribute 'split'
+[ERROR] [2022-11-15 21:00:30,344] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 500 96719
+[ERROR] [2022-11-15 21:02:34,240] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py", line 84, in post
+    task = TestTask.objects.create(id=task_id, title=title, description=description, state=0, plan_id=plan_id,
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 451, in create
+    obj = self.model(**kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 503, in __init__
+    raise TypeError("%s() got an unexpected keyword argument '%s'" % (cls.__name__, kwarg))
+TypeError: TestTask() got an unexpected keyword argument 'task_type'
+[ERROR] [2022-11-15 21:02:34,242] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 500 114910
+[INFO] [2022-11-15 21:03:18,330] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-15 21:03:18,675] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-15 21:03:21,735] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 200 511
+[INFO] [2022-11-15 21:05:09,234] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/urls.py changed, reloading.
+[INFO] [2022-11-15 21:05:09,584] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 21:05:27,381] [log.py:224] [log:log_response] - Not Found: /api/v1/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-15 21:05:27,381] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 404 3052
+[WARNING] [2022-11-15 21:05:49,310] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-15 21:05:49,311] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 403 43
+[WARNING] [2022-11-15 21:05:59,760] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-15 21:05:59,761] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 403 43
+[INFO] [2022-11-15 21:06:13,318] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-15 21:06:16,323] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-15 21:06:16,324] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 403 43
+[INFO] [2022-11-15 21:06:31,342] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:06:31,610] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:06:33,383] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:06:33,384] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 82566
+[INFO] [2022-11-15 21:06:47,620] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:06:47,898] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:06:52,109] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:06:52,110] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 82566
+[ERROR] [2022-11-15 21:08:37,057] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:08:37,057] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83256
+[INFO] [2022-11-15 21:09:13,362] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:09:13,701] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:09:14,857] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:09:14,859] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83256
+[INFO] [2022-11-15 21:09:36,877] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:09:37,160] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:09:38,381] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:09:38,381] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83256
+[INFO] [2022-11-15 21:09:55,134] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:09:55,416] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:09:57,110] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:09:57,111] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83256
+[INFO] [2022-11-15 21:10:36,534] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:10:36,775] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:10:38,095] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:10:38,096] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83256
+[INFO] [2022-11-15 21:11:57,744] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:11:58,114] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 21:11:59,899] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 21:11:59,900] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83256
+[INFO] [2022-11-15 21:51:17,106] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 21:51:17,458] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-15 22:01:26,151] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 22:01:26,493] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-15 22:02:08,402] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[ERROR] [2022-11-15 22:02:08,403] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 83518
+[INFO] [2022-11-15 22:05:56,566] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-15 22:05:56,886] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader

+ 553 - 0
logs/all-2022-11-16.log

@@ -0,0 +1,553 @@
+[INFO] [2022-11-16 11:11:24,701] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:14:12,976] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:14:13,388] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:14:59,320] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:14:59,577] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:19:01,644] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:19:01,923] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:19:16,724] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 292
+[INFO] [2022-11-16 11:20:04,630] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 281
+[INFO] [2022-11-16 11:20:28,525] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[INFO] [2022-11-16 11:21:21,241] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:21:21,549] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:21:51,918] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:21:52,194] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:22:22,353] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:22:22,580] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:34:22,971] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:36:16,515] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 281
+[ERROR] [2022-11-16 11:36:29,594] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
+    return self.cursor.execute(query, args)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 170, in execute
+    result = self._query(query)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 328, in _query
+    conn.query(q)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 516, in query
+    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 727, in _read_query_result
+    result.read()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 1066, in read
+    first_packet = self.connection._read_packet()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 683, in _read_packet
+    packet.check_error()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/protocol.py", line 220, in check_error
+    err.raise_mysql_exception(self._data)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
+    raise errorclass(errno, errval)
+pymysql.err.IntegrityError: (1062, "Duplicate entry 'TestLaboratory_V1_BeidouCase_1' for key 'beidou_case.PRIMARY'")
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py", line 55, in post
+    BeidouCase.objects.create(**params_dict)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 453, in create
+    obj.save(force_insert=True, using=self.db)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 726, in save
+    self.save_base(using=using, force_insert=force_insert,
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 763, in save_base
+    updated = self._save_table(
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 868, in _save_table
+    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 906, in _do_insert
+    return manager._insert(
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 1270, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
+    cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 98, in execute
+    return super().execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
+    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
+    return self.cursor.execute(query, args)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 170, in execute
+    result = self._query(query)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 328, in _query
+    conn.query(q)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 516, in query
+    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 727, in _read_query_result
+    result.read()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 1066, in read
+    first_packet = self.connection._read_packet()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 683, in _read_packet
+    packet.check_error()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/protocol.py", line 220, in check_error
+    err.raise_mysql_exception(self._data)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
+    raise errorclass(errno, errval)
+django.db.utils.IntegrityError: (1062, "Duplicate entry 'TestLaboratory_V1_BeidouCase_1' for key 'beidou_case.PRIMARY'")
+[ERROR] [2022-11-16 11:36:29,607] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 273483
+[ERROR] [2022-11-16 11:37:03,709] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
+    return self.cursor.execute(query, args)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 170, in execute
+    result = self._query(query)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 328, in _query
+    conn.query(q)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 516, in query
+    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 727, in _read_query_result
+    result.read()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 1066, in read
+    first_packet = self.connection._read_packet()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 683, in _read_packet
+    packet.check_error()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/protocol.py", line 220, in check_error
+    err.raise_mysql_exception(self._data)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
+    raise errorclass(errno, errval)
+pymysql.err.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`testlaboratory`.`beidou_case`, CONSTRAINT `beidou_case_software_id_5cfe9205_fk_software_id` FOREIGN KEY (`software_id`) REFERENCES `software` (`id`))')
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py", line 55, in post
+    BeidouCase.objects.create(**params_dict)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 453, in create
+    obj.save(force_insert=True, using=self.db)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 726, in save
+    self.save_base(using=using, force_insert=force_insert,
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 763, in save_base
+    updated = self._save_table(
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 868, in _save_table
+    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 906, in _do_insert
+    return manager._insert(
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 1270, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
+    cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 98, in execute
+    return super().execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
+    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
+    return self.cursor.execute(query, args)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 170, in execute
+    result = self._query(query)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 328, in _query
+    conn.query(q)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 516, in query
+    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 727, in _read_query_result
+    result.read()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 1066, in read
+    first_packet = self.connection._read_packet()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 683, in _read_packet
+    packet.check_error()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/protocol.py", line 220, in check_error
+    err.raise_mysql_exception(self._data)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
+    raise errorclass(errno, errval)
+django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`testlaboratory`.`beidou_case`, CONSTRAINT `beidou_case_software_id_5cfe9205_fk_software_id` FOREIGN KEY (`software_id`) REFERENCES `software` (`id`))')
+[ERROR] [2022-11-16 11:37:03,716] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 275791
+[INFO] [2022-11-16 11:37:48,342] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:37:48,611] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:37:51,370] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[ERROR] [2022-11-16 11:38:08,578] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
+    return self.cursor.execute(query, args)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 170, in execute
+    result = self._query(query)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 328, in _query
+    conn.query(q)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 516, in query
+    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 727, in _read_query_result
+    result.read()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 1066, in read
+    first_packet = self.connection._read_packet()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 683, in _read_packet
+    packet.check_error()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/protocol.py", line 220, in check_error
+    err.raise_mysql_exception(self._data)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
+    raise errorclass(errno, errval)
+pymysql.err.IntegrityError: (1062, "Duplicate entry 'TestLaboratory_V1_BeidouCase_1' for key 'beidou_case.PRIMARY'")
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py", line 55, in post
+    BeidouCase.objects.create(**params_dict)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 453, in create
+    obj.save(force_insert=True, using=self.db)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 726, in save
+    self.save_base(using=using, force_insert=force_insert,
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 763, in save_base
+    updated = self._save_table(
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 868, in _save_table
+    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/base.py", line 906, in _do_insert
+    return manager._insert(
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/query.py", line 1270, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
+    cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 98, in execute
+    return super().execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
+    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
+    return self.cursor.execute(sql, params)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/db/backends/mysql/base.py", line 73, in execute
+    return self.cursor.execute(query, args)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 170, in execute
+    result = self._query(query)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/cursors.py", line 328, in _query
+    conn.query(q)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 516, in query
+    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 727, in _read_query_result
+    result.read()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 1066, in read
+    first_packet = self.connection._read_packet()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/connections.py", line 683, in _read_packet
+    packet.check_error()
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/protocol.py", line 220, in check_error
+    err.raise_mysql_exception(self._data)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
+    raise errorclass(errno, errval)
+django.db.utils.IntegrityError: (1062, "Duplicate entry 'TestLaboratory_V1_BeidouCase_1' for key 'beidou_case.PRIMARY'")
+[ERROR] [2022-11-16 11:38:08,584] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 273800
+[INFO] [2022-11-16 11:38:31,936] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:38:32,255] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:38:35,396] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[INFO] [2022-11-16 11:51:28,830] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:51:29,250] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:54:22,231] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 11:54:22,609] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 11:54:25,116] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[ERROR] [2022-11-16 11:54:34,318] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py", line 49, in post
+    beidou_case.update(**params_dict)
+AttributeError: 'BeidouCase' object has no attribute 'update'
+[ERROR] [2022-11-16 11:54:34,319] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 500 98047
+[INFO] [2022-11-16 12:00:20,477] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 12:00:20,829] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 12:00:24,061] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[INFO] [2022-11-16 17:44:03,971] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/urls.py changed, reloading.
+[INFO] [2022-11-16 17:44:04,338] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 17:51:27,752] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/urls.py changed, reloading.
+[INFO] [2022-11-16 17:51:28,167] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 17:56:53,446] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 17:56:53,956] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 17:57:33,862] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 17:57:34,104] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 17:57:54,182] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 17:57:55,095] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 17:59:07,720] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 17:59:08,090] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:00:46,221] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:00:46,646] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-16 18:01:59,703] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1
+[WARNING] [2022-11-16 18:01:59,703] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 405 40
+[INFO] [2022-11-16 18:02:32,459] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/urls.py changed, reloading.
+[INFO] [2022-11-16 18:02:32,903] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[WARNING] [2022-11-16 18:02:34,573] [log.py:224] [log:log_response] - Method Not Allowed: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1
+[WARNING] [2022-11-16 18:02:34,573] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 405 40
+[INFO] [2022-11-16 18:03:27,963] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/urls.py changed, reloading.
+[INFO] [2022-11-16 18:03:28,328] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-16 18:03:30,055] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/user/middleware/rolecontrol.py", line 48, in __call__
+    return self.func(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py", line 180, in get
+    'version_file': {'file_name': version_file.path.split('/')[-1], 'file_url': HTTP_HEAD + SOFTWARE_ROOT
+NameError: name 'SOFTWARE_ROOT' is not defined
+[ERROR] [2022-11-16 18:03:30,057] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 500 103453
+[INFO] [2022-11-16 18:03:50,457] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:03:50,810] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:03:52,995] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 789
+[INFO] [2022-11-16 18:06:01,629] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:06:02,067] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:07:02,426] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:07:02,739] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:07:05,178] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 789
+[INFO] [2022-11-16 18:07:56,078] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:07:56,341] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:07:57,493] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 789
+[INFO] [2022-11-16 18:08:39,481] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:08:39,760] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:08:41,122] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 789
+[INFO] [2022-11-16 18:17:43,341] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:17:43,694] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:17:48,325] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 789
+[INFO] [2022-11-16 18:18:46,167] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:18:46,534] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:18:50,669] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 917
+[INFO] [2022-11-16 18:19:25,343] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-16 18:19:25,598] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 18:19:26,989] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 902
+[INFO] [2022-11-16 19:44:57,826] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-16 19:44:58,192] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 19:45:03,995] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[INFO] [2022-11-16 19:45:06,998] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 902
+[INFO] [2022-11-16 19:45:18,339] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-16 19:45:18,697] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 19:45:22,580] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[INFO] [2022-11-16 19:45:25,055] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 902
+[INFO] [2022-11-16 20:11:53,644] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:11:54,058] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:22:27,494] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:22:27,796] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:28:46,684] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:28:47,116] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:30:16,556] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:30:16,941] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:32:58,124] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:32:58,453] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:34:42,537] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:34:42,837] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:39:01,416] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:39:01,827] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:39:16,696] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:39:17,077] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:40:42,572] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:40:42,882] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:46:42,700] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:46:43,108] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:48:36,917] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:48:37,182] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:50:41,263] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:50:41,628] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:51:10,836] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:51:11,154] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:51:55,046] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:51:55,383] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:52:01,790] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:52:02,051] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:52:09,598] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:52:09,899] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 20:52:21,571] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 20:52:21,880] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:26:24,702] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:26:25,197] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:26:47,052] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:26:47,476] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:26:58,036] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:26:58,356] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:27:04,787] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:27:05,047] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:27:12,505] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:27:12,744] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:27:27,309] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:27:27,551] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:27:57,705] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:27:58,059] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:28:57,874] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:28:58,288] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:29:08,756] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:29:09,003] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:29:22,595] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:29:22,871] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:29:31,264] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:29:31,532] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:29:51,253] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:29:51,537] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:29:58,948] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:29:59,240] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:30:05,619] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:30:05,920] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:30:11,279] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:30:11,535] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:30:51,891] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:30:52,233] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:32:44,321] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:32:44,662] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:36:09,035] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:36:09,411] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-16 21:37:56,391] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/software/TestLaboratory_V1_Software_1/report
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py", line 80, in get
+    executor_name = User.object.filter(id=case.executor_id)[0].username
+AttributeError: type object 'User' has no attribute 'object'
+[ERROR] [2022-11-16 21:37:56,392] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software/TestLaboratory_V1_Software_1/report HTTP/1.1" 500 98552
+[INFO] [2022-11-16 21:38:10,963] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/software/views/report.py changed, reloading.
+[INFO] [2022-11-16 21:38:11,397] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:38:39,508] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software/TestLaboratory_V1_Software_1/report HTTP/1.1" 200 11264
+[WARNING] [2022-11-16 21:40:32,842] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/list
+[WARNING] [2022-11-16 21:40:32,843] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/list HTTP/1.1" 403 43
+[ERROR] [2022-11-16 21:40:43,679] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/list
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/user/middleware/rolecontrol.py", line 48, in __call__
+    return self.func(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py", line 133, in get
+    info.add({
+TypeError: unhashable type: 'dict'
+[ERROR] [2022-11-16 21:40:43,680] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/list HTTP/1.1" 500 101145
+[INFO] [2022-11-16 21:44:20,910] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-16 21:44:21,271] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:44:50,456] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-16 21:44:50,795] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:45:02,001] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/list HTTP/1.1" 200 623
+[INFO] [2022-11-16 21:45:35,038] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-16 21:45:35,425] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:45:37,420] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/list HTTP/1.1" 200 537
+[INFO] [2022-11-16 21:45:48,257] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-16 21:45:48,629] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-16 21:45:49,081] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/list HTTP/1.1" 200 226
+[INFO] [2022-11-16 21:47:01,159] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/info HTTP/1.1" 200 861
+[ERROR] [2022-11-16 21:48:53,259] [beidoutask.py:57] [beidoutask:post] - 测试计划已删除或不存在
+[WARNING] [2022-11-16 21:48:53,261] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou/edit
+[WARNING] [2022-11-16 21:48:53,262] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 404 33
+[INFO] [2022-11-16 21:50:09,116] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 200 15

+ 110 - 0
logs/all-2022-11-17.log

@@ -0,0 +1,110 @@
+[INFO] [2022-11-17 00:09:33,571] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-17 00:09:36,199] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/edit
+[ERROR] [2022-11-17 00:09:36,199] [basehttp.py:161] [basehttp:log_message] - "DELETE /api/v1/test-tasks/beidou/edit HTTP/1.1" 500 21
+[INFO] [2022-11-17 00:09:51,445] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 292
+[INFO] [2022-11-17 00:10:09,146] [basehttp.py:161] [basehttp:log_message] - "DELETE /api/v1/test-tasks/beidou/edit HTTP/1.1" 200 12
+[ERROR] [2022-11-17 00:21:14,355] [beidoutask.py:62] [beidoutask:post] - 测试任务不存在
+[WARNING] [2022-11-17 00:21:14,356] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou/edit
+[WARNING] [2022-11-17 00:21:14,357] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 404 21
+[INFO] [2022-11-17 00:22:10,050] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-17 00:22:10,348] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 00:28:10,076] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 200 511
+[INFO] [2022-11-17 00:28:54,134] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 200 511
+[ERROR] [2022-11-17 00:29:21,604] [beidoutask.py:77] [beidoutask:post] - 文件上传失败
+[ERROR] [2022-11-17 00:29:21,605] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/edit
+[ERROR] [2022-11-17 00:29:21,605] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 500 18
+[INFO] [2022-11-17 00:30:05,760] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-17 00:30:06,107] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-17 00:30:07,780] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/edit
+Traceback (most recent call last):
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
+    response = get_response(request)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "/Users/liufan/program/software/python/miniforge3/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/user/middleware/rolecontrol.py", line 48, in __call__
+    return self.func(request, *args, **kwargs)
+  File "/Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py", line 74, in post
+    TASK_ROOT + "/" + task_id + "/" + str(create_time))
+TypeError: can only concatenate str (not "NoneType") to str
+[ERROR] [2022-11-17 00:30:07,783] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 500 104299
+[INFO] [2022-11-17 00:30:44,728] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-17 00:30:44,996] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[ERROR] [2022-11-17 00:30:46,955] [beidoutask.py:90] [beidoutask:post] - 文件路径写入数据库失败
+[ERROR] [2022-11-17 00:30:46,955] [log.py:224] [log:log_response] - Internal Server Error: /api/v1/test-tasks/beidou/edit
+[ERROR] [2022-11-17 00:30:46,955] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 500 33
+[INFO] [2022-11-17 00:31:07,188] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-17 00:31:07,461] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 00:31:09,296] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 200 15
+[INFO] [2022-11-17 09:44:21,464] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-17 09:44:21,873] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 09:46:09,184] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutasklist.py changed, reloading.
+[INFO] [2022-11-17 09:46:09,464] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 09:46:51,985] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutask.py changed, reloading.
+[INFO] [2022-11-17 09:46:52,257] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 09:47:14,495] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 292
+[INFO] [2022-11-17 09:47:39,980] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software HTTP/1.1" 301 0
+[INFO] [2022-11-17 09:47:39,994] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/software/ HTTP/1.1" 200 2
+[ERROR] [2022-11-17 09:47:43,637] [softwarelistview.py:31] [softwarelistview:post] - 软件上传失败
+[WARNING] [2022-11-17 09:47:43,637] [log.py:224] [log:log_response] - Not Found: /api/v1/software/
+[WARNING] [2022-11-17 09:47:43,638] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/software/ HTTP/1.1" 404 18
+[INFO] [2022-11-17 09:47:48,708] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/software/ HTTP/1.1" 200 161
+[INFO] [2022-11-17 09:48:04,929] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-plans/ HTTP/1.1" 200 460
+[INFO] [2022-11-17 09:48:16,614] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 200 511
+[INFO] [2022-11-17 09:48:30,877] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 996
+[INFO] [2022-11-17 09:48:36,841] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/list HTTP/1.1" 200 263
+[INFO] [2022-11-17 09:48:40,369] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/info HTTP/1.1" 200 865
+[ERROR] [2022-11-17 09:48:44,507] [beidoutask.py:61] [beidoutask:post] - 测试任务不存在
+[WARNING] [2022-11-17 09:48:44,509] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou/edit
+[WARNING] [2022-11-17 09:48:44,509] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 404 21
+[INFO] [2022-11-17 09:49:47,061] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/edit HTTP/1.1" 200 15
+[WARNING] [2022-11-17 09:50:00,191] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-17 09:50:00,192] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 403 43
+[INFO] [2022-11-17 09:50:20,984] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 281
+[WARNING] [2022-11-17 09:50:31,717] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-17 09:50:31,718] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 403 43
+[INFO] [2022-11-17 09:51:53,571] [basehttp.py:161] [basehttp:log_message] - "GET /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1 HTTP/1.1" 200 1203
+[WARNING] [2022-11-17 09:52:34,663] [log.py:224] [log:log_response] - Forbidden: /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute
+[WARNING] [2022-11-17 09:52:34,664] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 403 43
+[INFO] [2022-11-17 09:54:15,720] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_1/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 09:56:29,792] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-17 09:56:30,200] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 12:11:25,077] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 12:11:41,187] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/users/login HTTP/1.1" 200 292
+[INFO] [2022-11-17 12:11:58,028] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 200 511
+[ERROR] [2022-11-17 12:19:31,753] [beidoutasklist.py:45] [beidoutasklist:post] - 测试任务已存在,请重新命名
+[WARNING] [2022-11-17 12:19:31,755] [log.py:224] [log:log_response] - Not Found: /api/v1/test-tasks/beidou
+[WARNING] [2022-11-17 12:19:31,755] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 404 39
+[INFO] [2022-11-17 12:19:42,251] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou HTTP/1.1" 200 511
+[INFO] [2022-11-17 16:10:41,440] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 16:11:01,528] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:11:28,202] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:11:28,893] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:11:29,476] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:11:30,059] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:11:30,649] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:12:24,566] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:12:40,336] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_6/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:12:47,154] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_6/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:13:19,855] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-17 16:13:20,289] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 16:13:28,031] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:13:53,302] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-17 16:13:53,652] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 16:14:00,936] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_5/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:16:43,693] [autoreload.py:251] [autoreload:trigger_reload] - /Users/liufan/program/PYTHON/TestLaboratoryGit/TestLaboratory/apps/task/views/beidoutaskexecute.py changed, reloading.
+[INFO] [2022-11-17 16:16:44,126] [autoreload.py:637] [autoreload:run_with_reloader] - Watching for file changes with StatReloader
+[INFO] [2022-11-17 16:16:56,108] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_6/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:17:04,611] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_6/execute HTTP/1.1" 200 12
+[INFO] [2022-11-17 16:17:23,225] [basehttp.py:161] [basehttp:log_message] - "POST /api/v1/test-tasks/beidou/TestLaboratory_V1_Task_6/execute HTTP/1.1" 200 12

+ 0 - 0
logs/error-2022-11-15.log


+ 0 - 0
logs/error-2022-11-16.log


+ 0 - 0
logs/error-2022-11-17.log


+ 0 - 0
logs/info-2022-11-15.log


+ 0 - 0
logs/info-2022-11-16.log


+ 0 - 0
logs/info-2022-11-17.log


+ 89 - 7
mysql-init/TestLaboratory.sql

@@ -11,7 +11,7 @@
  Target Server Version : 80029
  File Encoding         : 65001
 
- Date: 12/10/2022 22:29:41
+ Date: 17/11/2022 09:30:54
 */
 
 SET NAMES utf8mb4;
@@ -67,7 +67,7 @@ CREATE TABLE `auth_permission` (
   PRIMARY KEY (`id`),
   UNIQUE KEY `auth_permission_content_type_id_codename_01ab375a_uniq` (`content_type_id`,`codename`),
   CONSTRAINT `auth_permission_content_type_id_2f476e4b_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
 -- Records of auth_permission
@@ -141,6 +141,10 @@ INSERT INTO `auth_permission` VALUES (65, 'Can add 被测试软件', 17, 'add_gr
 INSERT INTO `auth_permission` VALUES (66, 'Can change 被测试软件', 17, 'change_group');
 INSERT INTO `auth_permission` VALUES (67, 'Can delete 被测试软件', 17, 'delete_group');
 INSERT INTO `auth_permission` VALUES (68, 'Can view 被测试软件', 17, 'view_group');
+INSERT INTO `auth_permission` VALUES (69, 'Can add 北斗测试用例', 18, 'add_beidoucase');
+INSERT INTO `auth_permission` VALUES (70, 'Can change 北斗测试用例', 18, 'change_beidoucase');
+INSERT INTO `auth_permission` VALUES (71, 'Can delete 北斗测试用例', 18, 'delete_beidoucase');
+INSERT INTO `auth_permission` VALUES (72, 'Can view 北斗测试用例', 18, 'view_beidoucase');
 COMMIT;
 
 -- ----------------------------
@@ -212,6 +216,55 @@ BEGIN;
 COMMIT;
 
 -- ----------------------------
+-- Table structure for beidou_case
+-- ----------------------------
+DROP TABLE IF EXISTS `beidou_case`;
+CREATE TABLE `beidou_case` (
+  `id` varchar(128) NOT NULL,
+  `version` varchar(30) DEFAULT NULL,
+  `title` varchar(50) NOT NULL,
+  `state` int NOT NULL,
+  `positioning_accuracy` double DEFAULT NULL,
+  `timing_accuracy` double DEFAULT NULL,
+  `pseudo_range_measurement_accuracy` double DEFAULT NULL,
+  `carrier_measurement_accuracy` double DEFAULT NULL,
+  `speed_measurement_accuracy` double DEFAULT NULL,
+  `sensitivity_capture` double DEFAULT NULL,
+  `receiving_sensitivity` double DEFAULT NULL,
+  `sensitivity_track` double DEFAULT NULL,
+  `power_range_low` double DEFAULT NULL,
+  `power_range_high` double DEFAULT NULL,
+  `self_integrity` double DEFAULT NULL,
+  `system_integrity` double DEFAULT NULL,
+  `capture_time` double DEFAULT NULL,
+  `recapture_time` double DEFAULT NULL,
+  `update_rate` double DEFAULT NULL,
+  `trace_channels` int DEFAULT NULL,
+  `max_velocity` double DEFAULT NULL,
+  `max_acceleration` double DEFAULT NULL,
+  `create_time` datetime(6) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `delete` tinyint(1) NOT NULL,
+  `remark` longtext,
+  `executor_id` varchar(128) DEFAULT NULL,
+  `software_id` varchar(128) DEFAULT NULL,
+  `task_id` varchar(128) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `beidou_case_executor_id_f189bc82_fk_user_id` (`executor_id`),
+  KEY `beidou_case_software_id_5cfe9205_fk_software_id` (`software_id`),
+  KEY `beidou_case_task_id_f61ad6ca_fk_task_id` (`task_id`),
+  CONSTRAINT `beidou_case_executor_id_f189bc82_fk_user_id` FOREIGN KEY (`executor_id`) REFERENCES `user` (`id`),
+  CONSTRAINT `beidou_case_software_id_5cfe9205_fk_software_id` FOREIGN KEY (`software_id`) REFERENCES `software` (`id`),
+  CONSTRAINT `beidou_case_task_id_f61ad6ca_fk_task_id` FOREIGN KEY (`task_id`) REFERENCES `task` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of beidou_case
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+-- ----------------------------
 -- Table structure for django_admin_log
 -- ----------------------------
 DROP TABLE IF EXISTS `django_admin_log`;
@@ -248,7 +301,7 @@ CREATE TABLE `django_content_type` (
   `model` varchar(100) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `django_content_type_app_label_model_76bd3d3b_uniq` (`app_label`,`model`)
-) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
 -- Records of django_content_type
@@ -266,6 +319,7 @@ INSERT INTO `django_content_type` VALUES (12, 'plan', 'testplan');
 INSERT INTO `django_content_type` VALUES (6, 'sessions', 'session');
 INSERT INTO `django_content_type` VALUES (10, 'software', 'software');
 INSERT INTO `django_content_type` VALUES (11, 'software', 'version');
+INSERT INTO `django_content_type` VALUES (18, 'task', 'beidoucase');
 INSERT INTO `django_content_type` VALUES (14, 'task', 'testcase');
 INSERT INTO `django_content_type` VALUES (13, 'task', 'testtask');
 INSERT INTO `django_content_type` VALUES (7, 'user', 'permission');
@@ -283,7 +337,7 @@ CREATE TABLE `django_migrations` (
   `name` varchar(255) NOT NULL,
   `applied` datetime(6) NOT NULL,
   PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
 -- Records of django_migrations
@@ -326,6 +380,8 @@ INSERT INTO `django_migrations` VALUES (34, 'task', '0004_alter_testcase_id', '2
 INSERT INTO `django_migrations` VALUES (35, 'user', '0003_remove_user_group', '2022-10-05 17:30:42.091655');
 INSERT INTO `django_migrations` VALUES (36, 'group', '0002_group_users', '2022-10-05 17:30:42.127830');
 INSERT INTO `django_migrations` VALUES (37, 'group', '0003_alter_group_code', '2022-10-05 19:27:19.485913');
+INSERT INTO `django_migrations` VALUES (38, 'task', '0005_testtask_type', '2022-11-15 10:49:43.901233');
+INSERT INTO `django_migrations` VALUES (39, 'task', '0006_beidoucase', '2022-11-15 20:24:01.661133');
 COMMIT;
 
 -- ----------------------------
@@ -483,7 +539,14 @@ INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_34', '加入班
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_35', '退出班级', '/api/v1/users/.*/quit', 'POST', '2022-10-06 09:03:27.000000', '2022-10-06 09:03:30.000000', 0);
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_36', '分组用户', '/api/v1/group/user', 'GET', '2022-10-10 22:02:45.000000', '2022-10-10 22:02:47.000000', 0);
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_37', '导出用户', '/api/v1/users/group', 'GET', '2022-10-12 11:35:48.000000', '2022-10-12 11:35:50.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_38', '创建北斗任务', '/api/v1/test-tasks/beidou', 'POST', '2022-10-06 08:59:33.000000', '2022-10-06 08:59:38.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_39', '北斗任务列表', '/api/v1/test-tasks/beidou/list', 'GET', '2022-10-06 09:00:25.000000', '2022-10-06 09:00:29.000000', 0);
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_4', '编辑测试目标', '/api/v1/software/.*/edit', 'POST', '2021-07-14 10:25:48.000000', '2021-07-14 10:25:50.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_40', '北斗任务executor信息', '/api/v1/test-tasks/beidou/info', 'GET', '2022-10-06 09:01:18.000000', '2022-10-06 09:01:22.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_41', '编辑北斗任务', '/api/v1/test-tasks/beidou/edit', 'POST', '2022-10-06 09:01:18.000000', '2022-10-06 09:01:22.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_42', '删除北斗任务', '/api/v1/test-tasks/beidou/edit', 'DELETE', '2022-10-06 09:01:59.000000', '2022-10-06 09:02:03.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_43', '执行北斗任务', '/api/v1/test-tasks/beidou/.*/execute', 'POST', '2022-10-06 09:02:48.000000', '2022-10-06 09:02:53.000000', 0);
+INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_44', '查看北斗任务执行结果', '/api/v1/test-tasks/beidou/.*', 'GET', '2022-10-06 09:03:27.000000', '2022-10-06 09:03:30.000000', 0);
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_5', '删除测试目标', '/api/v1/software/.*', 'DELETE', '2021-07-14 10:26:40.000000', '2021-07-14 10:26:42.000000', 0);
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_6', '生成测试报告', '/api/v1/software/.*/report', 'GET', '2021-07-14 10:27:43.000000', '2021-07-14 10:27:46.000000', 0);
 INSERT INTO `permission` VALUES ('TestLaboratory_V1_Permission_7', '新建版本', '/api/v1/software/.*/versions', 'POST', '2021-07-14 10:29:22.000000', '2021-07-14 10:29:25.000000', 0);
@@ -554,7 +617,7 @@ CREATE TABLE `role_permissions` (
   PRIMARY KEY (`id`),
   UNIQUE KEY `role_permissions_role_id_permission_id_04f77df0_uniq` (`role_id`,`permission_id`),
   KEY `role_permissions_permission_id_ad343843_fk_permission_id` (`permission_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
 -- Records of role_permissions
@@ -590,7 +653,14 @@ INSERT INTO `role_permissions` VALUES (77, 'TestLaboratory_V1_Role_1', 'TestLabo
 INSERT INTO `role_permissions` VALUES (80, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_35');
 INSERT INTO `role_permissions` VALUES (84, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_36');
 INSERT INTO `role_permissions` VALUES (86, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_37');
+INSERT INTO `role_permissions` VALUES (88, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_38');
+INSERT INTO `role_permissions` VALUES (90, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_39');
 INSERT INTO `role_permissions` VALUES (4, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_4');
+INSERT INTO `role_permissions` VALUES (93, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_40');
+INSERT INTO `role_permissions` VALUES (96, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_41');
+INSERT INTO `role_permissions` VALUES (98, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_42');
+INSERT INTO `role_permissions` VALUES (100, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_43');
+INSERT INTO `role_permissions` VALUES (103, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_44');
 INSERT INTO `role_permissions` VALUES (5, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_5');
 INSERT INTO `role_permissions` VALUES (6, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_6');
 INSERT INTO `role_permissions` VALUES (7, 'TestLaboratory_V1_Role_1', 'TestLaboratory_V1_Permission_7');
@@ -626,7 +696,14 @@ INSERT INTO `role_permissions` VALUES (78, 'TestLaboratory_V1_Role_2', 'TestLabo
 INSERT INTO `role_permissions` VALUES (81, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_35');
 INSERT INTO `role_permissions` VALUES (85, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_36');
 INSERT INTO `role_permissions` VALUES (87, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_37');
+INSERT INTO `role_permissions` VALUES (89, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_38');
+INSERT INTO `role_permissions` VALUES (91, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_39');
 INSERT INTO `role_permissions` VALUES (25, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_4');
+INSERT INTO `role_permissions` VALUES (94, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_40');
+INSERT INTO `role_permissions` VALUES (97, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_41');
+INSERT INTO `role_permissions` VALUES (99, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_42');
+INSERT INTO `role_permissions` VALUES (101, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_43');
+INSERT INTO `role_permissions` VALUES (104, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_44');
 INSERT INTO `role_permissions` VALUES (26, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_5');
 INSERT INTO `role_permissions` VALUES (27, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_6');
 INSERT INTO `role_permissions` VALUES (28, 'TestLaboratory_V1_Role_2', 'TestLaboratory_V1_Permission_7');
@@ -647,6 +724,10 @@ INSERT INTO `role_permissions` VALUES (44, 'TestLaboratory_V1_Role_3', 'TestLabo
 INSERT INTO `role_permissions` VALUES (83, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_31');
 INSERT INTO `role_permissions` VALUES (79, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_34');
 INSERT INTO `role_permissions` VALUES (82, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_35');
+INSERT INTO `role_permissions` VALUES (92, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_39');
+INSERT INTO `role_permissions` VALUES (95, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_40');
+INSERT INTO `role_permissions` VALUES (102, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_43');
+INSERT INTO `role_permissions` VALUES (105, 'TestLaboratory_V1_Role_3', 'TestLaboratory_V1_Permission_44');
 COMMIT;
 
 -- ----------------------------
@@ -690,6 +771,7 @@ CREATE TABLE `task` (
   `delete` tinyint(1) NOT NULL,
   `plan_id` varchar(128) NOT NULL,
   `executor_id` varchar(128) DEFAULT NULL,
+  `type` varchar(30) NOT NULL,
   PRIMARY KEY (`id`),
   KEY `task_plan_id_77395325_fk_plan_id` (`plan_id`),
   KEY `task_executor_id_24a67329_fk_user_id` (`executor_id`),
@@ -768,8 +850,8 @@ CREATE TABLE `user` (
 -- Records of user
 -- ----------------------------
 BEGIN;
-INSERT INTO `user` VALUES ('TestLaboratory_V1_User_1', 'honghong', '小红', '123456', '18851111391', 1, '2021-07-13 14:23:25.000000', '2022-10-10 22:09:59.520843', 1, 0);
-INSERT INTO `user` VALUES ('TestLaboratory_V1_User_2', 'zxc', '小蓝', '123456', '11223344556', 2, '2021-09-26 15:41:37.000000', '1900-01-20 17:33:18.000000', 0, 0);
+INSERT INTO `user` VALUES ('TestLaboratory_V1_User_1', 'honghong', '小红', '123456', '18851111391', 1, '2021-07-13 14:23:25.000000', '2022-11-17 00:09:51.441505', 1, 0);
+INSERT INTO `user` VALUES ('TestLaboratory_V1_User_2', 'zxc', '小蓝', '123456', '11223344556', 2, '2021-09-26 15:41:37.000000', '2022-11-16 11:36:16.512469', 1, 0);
 INSERT INTO `user` VALUES ('TestLaboratory_V1_User_3', 'bcd', '小黄', '123456', '138138138138', 2, '2021-09-26 15:44:39.000000', '2021-09-26 15:44:43.000000', 0, 0);
 COMMIT;
 

BIN
static/plan-statement/TestLaboratory_V1_Plan_1/2022-11-17 09:48:04.904191/2021.6.5班会.docx


BIN
static/software/2022-11-16 21:38:39.498105/beidou专用-全部测试用例.xls


BIN
static/software/TestLaboratory_V1_Software_1/TestLaboratory_V1_Version_1/2022-11-15 20:46:03.640645/2021.6.5班会.docx


BIN
static/software/TestLaboratory_V1_Software_1/TestLaboratory_V1_Version_1/2022-11-17 09:47:48.686593/2021.6.5班会.docx


BIN
static/task-statement/TestLaboratory_V1_Task_1/2022-11-17 09:49:47.026514/2021.6.5班会.docx


+ 0 - 0
static/task-statement/TestLaboratory_V1_Task_2/2022-11-17 09:49:47.037050/2021.6.5班会.docx


BIN
static/task-statement/TestLaboratory_V1_Task_3/2022-11-17 00:30:46.953334/2021.6.5班会.docx


BIN
static/task-statement/TestLaboratory_V1_Task_3/2022-11-17 00:31:09.261699/2021.6.5班会.docx


+ 0 - 0
static/task-statement/TestLaboratory_V1_Task_4/2022-11-17 00:31:09.269277/2021.6.5班会.docx


+ 4 - 0
test.py

@@ -0,0 +1,4 @@
+a = [1,2,3,4,5]
+for i in range(len(a)):
+    a[i] = 1
+print(a)