Bläddra i källkod

Initial commit with api created and code refactor finished

wendaojidian 4 år sedan
incheckning
ce7c6ac357
100 ändrade filer med 1117 tillägg och 0 borttagningar
  1. BIN
      .DS_Store
  2. 8 0
      .idea/.gitignore
  3. 29 0
      .idea/Test_laboratory.iml
  4. 12 0
      .idea/dataSources.xml
  5. 16 0
      .idea/inspectionProfiles/Project_Default.xml
  6. 6 0
      .idea/inspectionProfiles/profiles_settings.xml
  7. 4 0
      .idea/misc.xml
  8. 8 0
      .idea/modules.xml
  9. 6 0
      .idea/vcs.xml
  10. 0 0
      Config/__init__.py
  11. 7 0
      Config/database_mysql.cnf
  12. 19 0
      Pipfile
  13. 20 0
      Pipfile.lock.old
  14. 9 0
      README.md
  15. 3 0
      Test_laboratory/__init__.py
  16. BIN
      Test_laboratory/__pycache__/__init__.cpython-39.pyc
  17. BIN
      Test_laboratory/__pycache__/settings.cpython-39.pyc
  18. BIN
      Test_laboratory/__pycache__/urls.cpython-39.pyc
  19. BIN
      Test_laboratory/__pycache__/wsgi.cpython-39.pyc
  20. 16 0
      Test_laboratory/asgi.py
  21. 145 0
      Test_laboratory/settings.py
  22. 24 0
      Test_laboratory/urls.py
  23. 16 0
      Test_laboratory/wsgi.py
  24. BIN
      api_test/.DS_Store
  25. 0 0
      api_test/__init__.py
  26. BIN
      api_test/__pycache__/test_signup_login.cpython-39.pyc
  27. 11 0
      api_test/lf_try.py
  28. 57 0
      api_test/test_signup_login.py
  29. 4 0
      api_test/test_signup_login_2.py
  30. 18 0
      api_test/test_software.py
  31. 0 0
      apps/__init__.py
  32. BIN
      apps/__pycache__/__init__.cpython-39.pyc
  33. 0 0
      apps/log_info/__init__.py
  34. 3 0
      apps/log_info/admin.py
  35. 6 0
      apps/log_info/apps.py
  36. 0 0
      apps/log_info/migrations/__init__.py
  37. 3 0
      apps/log_info/models.py
  38. 3 0
      apps/log_info/tests.py
  39. 6 0
      apps/log_info/urls.py
  40. 0 0
      apps/log_info/views/__init__.py
  41. 12 0
      apps/log_info/views/log_list.py
  42. 0 0
      apps/service/__init__.py
  43. BIN
      apps/service/__pycache__/__init__.cpython-39.pyc
  44. BIN
      apps/service/__pycache__/admin.cpython-39.pyc
  45. BIN
      apps/service/__pycache__/apps.cpython-39.pyc
  46. BIN
      apps/service/__pycache__/models.cpython-39.pyc
  47. BIN
      apps/service/__pycache__/urls.cpython-39.pyc
  48. 3 0
      apps/service/admin.py
  49. 6 0
      apps/service/apps.py
  50. 0 0
      apps/service/controller/__init__.py
  51. 43 0
      apps/service/controller/test_target_controller.py
  52. 0 0
      apps/service/dao/__init__.py
  53. 24 0
      apps/service/dao/test_target_dao.py
  54. 0 0
      apps/service/migrations/__init__.py
  55. BIN
      apps/service/migrations/__pycache__/__init__.cpython-39.pyc
  56. 12 0
      apps/service/models.py
  57. 18 0
      apps/service/templates/service/upload.html
  58. 3 0
      apps/service/tests.py
  59. 13 0
      apps/service/urls.py
  60. 0 0
      apps/service/views/__init__.py
  61. 11 0
      apps/service/views/test_views.py
  62. 0 0
      apps/software/__init__.py
  63. 3 0
      apps/software/admin.py
  64. 6 0
      apps/software/apps.py
  65. 49 0
      apps/software/migrations/0001_initial.py
  66. 0 0
      apps/software/migrations/__init__.py
  67. 38 0
      apps/software/models.py
  68. 3 0
      apps/software/tests.py
  69. 15 0
      apps/software/urls.py
  70. 0 0
      apps/software/views/__init__.py
  71. 12 0
      apps/software/views/report.py
  72. 22 0
      apps/software/views/software_edit.py
  73. 17 0
      apps/software/views/software_list.py
  74. 12 0
      apps/software/views/version_create.py
  75. 12 0
      apps/software/views/version_download.py
  76. 17 0
      apps/software/views/version_edit.py
  77. 0 0
      apps/test_plan/__init__.py
  78. 3 0
      apps/test_plan/admin.py
  79. 6 0
      apps/test_plan/apps.py
  80. 37 0
      apps/test_plan/migrations/0001_initial.py
  81. 0 0
      apps/test_plan/migrations/__init__.py
  82. 26 0
      apps/test_plan/models.py
  83. 3 0
      apps/test_plan/tests.py
  84. 8 0
      apps/test_plan/urls.py
  85. 0 0
      apps/test_plan/views/__init__.py
  86. 22 0
      apps/test_plan/views/plan_edit.py
  87. 17 0
      apps/test_plan/views/plan_list.py
  88. 0 0
      apps/test_task/__init__.py
  89. 3 0
      apps/test_task/admin.py
  90. 6 0
      apps/test_task/apps.py
  91. 59 0
      apps/test_task/migrations/0001_initial.py
  92. 0 0
      apps/test_task/migrations/__init__.py
  93. 51 0
      apps/test_task/models.py
  94. 3 0
      apps/test_task/tests.py
  95. 10 0
      apps/test_task/urls.py
  96. 0 0
      apps/test_task/views/__init__.py
  97. 12 0
      apps/test_task/views/task_delete.py
  98. 12 0
      apps/test_task/views/task_edit.py
  99. 12 0
      apps/test_task/views/task_execute.py
  100. 17 0
      apps/test_task/views/task_list.py

BIN
.DS_Store


+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 29 - 0
.idea/Test_laboratory.iml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="django" name="Django">
+      <configuration>
+        <option name="rootFolder" value="$MODULE_DIR$" />
+        <option name="settingsModule" value="Test_laboratory/settings.py" />
+        <option name="manageScript" value="$MODULE_DIR$/manage.py" />
+        <option name="environment" value="&lt;map/&gt;" />
+        <option name="doNotUseTestRunner" value="false" />
+        <option name="trackFilePattern" value="migrations" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="PackageRequirementsSettings">
+    <option name="versionSpecifier" value="Strong equality (==x.y.z)" />
+  </component>
+  <component name="PyDocumentationSettings">
+    <option name="renderExternalDocumentation" value="true" />
+  </component>
+  <component name="TemplatesService">
+    <option name="TEMPLATE_CONFIGURATION" value="Django" />
+  </component>
+</module>

+ 12 - 0
.idea/dataSources.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
+    <data-source source="LOCAL" name="@localhost" uuid="af586aca-cf6d-41c7-b263-2a55180b195e">
+      <driver-ref>mysql.8</driver-ref>
+      <synchronize>true</synchronize>
+      <jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
+      <jdbc-url>jdbc:mysql://localhost:3306</jdbc-url>
+      <working-dir>$ProjectFileDir$</working-dir>
+    </data-source>
+  </component>
+</project>

+ 16 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,16 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
+    <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+      <option name="ignoredErrors">
+        <list>
+          <option value="N802" />
+          <option value="N806" />
+          <option value="N801" />
+        </list>
+      </option>
+    </inspection_tool>
+    <inspection_tool class="Stylelint" enabled="true" level="ERROR" enabled_by_default="true" />
+  </profile>
+</component>

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 4 - 0
.idea/misc.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (base) (2)" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/Test_laboratory.iml" filepath="$PROJECT_DIR$/.idea/Test_laboratory.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 0 - 0
Config/__init__.py


+ 7 - 0
Config/database_mysql.cnf

@@ -0,0 +1,7 @@
+[client]
+host = 127.0.0.1
+port = 3306
+database = Test_laboratory
+user = root
+password = liufan3344
+default-character-set = utf8

+ 19 - 0
Pipfile

@@ -0,0 +1,19 @@
+[[source]]
+url = "https://pypi.org/simple"
+verify_ssl = true
+name = "pypi"
+
+[packages]
+django = "*"
+pymysql = "*"
+django-simpleui = "*"
+djangorestframework-jwt = "*"
+requests = "*"
+pyjwt = "*"
+jwt = "*"
+djangorestframework = "*"
+
+[dev-packages]
+
+[requires]
+python_version = "3.9"

+ 20 - 0
Pipfile.lock.old

@@ -0,0 +1,20 @@
+{
+    "_meta": {
+        "hash": {
+            "sha256": "a36a5392bb1e8bbc06bfaa0761e52593cf2d83b486696bf54667ba8da616c839"
+        },
+        "pipfile-spec": 6,
+        "requires": {
+            "python_version": "3.9"
+        },
+        "sources": [
+            {
+                "name": "pypi",
+                "url": "https://pypi.org/simple",
+                "verify_ssl": true
+            }
+        ]
+    },
+    "default": {},
+    "develop": {}
+}

+ 9 - 0
README.md

@@ -0,0 +1,9 @@
+# Readme
+## 1. 安装第三方依赖
+```pipenv install -r requirements.txt```
+## 2.在Config/database_mysql.cnf文件中修改数据库配置
+## 3.数据库迁移
+```python manage.py makemigrations```
+```python manage.py migrate```
+## 4.运行服务端
+```python manage.py runserver```

+ 3 - 0
Test_laboratory/__init__.py

@@ -0,0 +1,3 @@
+import pymysql
+pymysql.version_info = (1, 4, 13, "final", 0)
+pymysql.install_as_MySQLdb()

BIN
Test_laboratory/__pycache__/__init__.cpython-39.pyc


BIN
Test_laboratory/__pycache__/settings.cpython-39.pyc


BIN
Test_laboratory/__pycache__/urls.cpython-39.pyc


BIN
Test_laboratory/__pycache__/wsgi.cpython-39.pyc


+ 16 - 0
Test_laboratory/asgi.py

@@ -0,0 +1,16 @@
+"""
+ASGI config for Test_laboratory project.
+
+It exposes the ASGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
+"""
+
+import os
+
+from django.core.asgi import get_asgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Test_laboratory.settings')
+
+application = get_asgi_application()

+ 145 - 0
Test_laboratory/settings.py

@@ -0,0 +1,145 @@
+"""
+Django settings for Test_laboratory project.
+
+Generated by 'django-admin startproject' using Django 3.2.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/3.2/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/3.2/ref/settings/
+"""
+
+from pathlib import Path
+import sys
+import os
+
+# Build paths inside the project like this: BASE_DIR / 'subdir'.
+import apps.user.middleware.authentication
+
+BASE_DIR = Path(__file__).resolve().parent.parent
+sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
+
+MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
+MEDIA_URL = '/media/'
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'django-insecure-zo64fvv02msf-se7!dek5*w$17#3nh6zta#!i=79bt9d#f88@i'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'simpleui',
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'rest_framework',
+    'user',
+    'software',
+    'test_plan',
+    'apps.test_task'
+]
+
+MIDDLEWARE = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    # 'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'Test_laboratory.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [os.path.join(BASE_DIR, 'templates')],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'Test_laboratory.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'OPTIONS': {
+            'read_default_file': 'Config/database_mysql.cnf',
+        },
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/3.2/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/3.2/howto/static-files/
+
+STATIC_URL = '/static/'
+
+# Default primary key field type
+# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
+
+DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+REST_FRAMEWORK = {
+    "DEFAULT_AUTHENTICATION_CLASSES": ["apps.user.middleware.authentication.JwtAutentication"]
+}

+ 24 - 0
Test_laboratory/urls.py

@@ -0,0 +1,24 @@
+"""Test_laboratory URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/3.2/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.urls import path, include
+
+urlpatterns = [
+    path('v1/users/', include('user.urls')),
+    path('v1/software/', include('software.urls')),
+    path('v1/test-plans/', include('test_plan.urls')),
+    path('v1/test-tasks/', include('test_task.urls')),
+    path('v1/log-info/', include('log_info.urls')),
+]

+ 16 - 0
Test_laboratory/wsgi.py

@@ -0,0 +1,16 @@
+"""
+WSGI config for Test_laboratory project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Test_laboratory.settings')
+
+application = get_wsgi_application()

BIN
api_test/.DS_Store


+ 0 - 0
api_test/__init__.py


BIN
api_test/__pycache__/test_signup_login.cpython-39.pyc


+ 11 - 0
api_test/lf_try.py

@@ -0,0 +1,11 @@
+from Test_laboratory.settings import *
+
+# print(MEDIA_ROOT)
+# print(MEDIA_URL)
+
+
+def show_kwargs(**kwargs):
+    print(kwargs)
+
+
+show_kwargs(a=100, b=200)

+ 57 - 0
api_test/test_signup_login.py

@@ -0,0 +1,57 @@
+import requests
+from utils import util_jwt
+import json
+
+
+def test_signup():
+    user_info_leader_1 = {
+        "username": "abcd",
+        "realname": "小陈",
+        "password": "12345678",
+        "identify": "测试领导"
+    }
+
+    jwt_info = {
+        "jwt_token": util_jwt.jwt_encoding(user_info_leader_1)
+    }
+
+    re = requests.post("http://localhost:8000/users/signup/", data=json.dumps(jwt_info))
+    print(re.text)
+    # print(re.json()['jwt_info'])
+
+
+def test_login(user_name, password):
+    user_info_leader_1 = {
+        "username": user_name,
+        "password": password
+    }
+
+    jwt_login_info = {
+        "jwt_token": util_jwt.jwt_encoding(user_info_leader_1)
+    }
+
+    re = requests.post("http://localhost:8000/users/login/", data=json.dumps(jwt_login_info))
+    print(re.json())
+
+
+def test_has_login():
+    user_info_has_login_1 = {
+        "user_token": 'eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9'
+                      '.eyJ1c2VybmFtZSI6ImFiYyIsInBhc3N3b3JkIjoiMTIzNDU2IiwiZXhwIjoxNjI0NzgwNTU4fQ'
+                      '.g98hV8hXYtozVuvTpk1QxT4eQJwaj7KL3FzKe9C-m6E',
+        "user_info": "123"
+    }
+
+    # re = requests.post("http://localhost:8000/users/dosomething/", data=json.dumps(user_info_has_login_1))
+    re = requests.get("http://localhost:8000/users/dosomething/?"
+                      "user_token=eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9."
+                      "eyJ1c2VybmFtZSI6ImFiYyIsInBhc3N3b3JkIjoiMTIzNDU2IiwiZXhwIjoxNjI0NzgwNTU4fQ."
+                      "g98hV8hXYtozVuvTpk1QxT4eQJwaj7KL3FzKe9C-m6E")
+    print(re.text)
+
+
+if __name__ == '__main__':
+    # test_signup()
+    # test_login("abc", "123456")
+    # test_login("bcd", "112345")
+    test_has_login()

+ 4 - 0
api_test/test_signup_login_2.py

@@ -0,0 +1,4 @@
+from test_signup_login import *
+
+
+test_login("bcd", "112345")

+ 18 - 0
api_test/test_software.py

@@ -0,0 +1,18 @@
+import requests
+import json
+
+
+def test_software_upload():
+    file_user = {
+        "user_token": 'eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9'
+                      '.eyJ1c2VybmFtZSI6ImFiYyIsInBhc3N3b3JkIjoiMTIzNDU2IiwiZXhwIjoxNjI0NzgwNTU4fQ'
+                      '.g98hV8hXYtozVuvTpk1QxT4eQJwaj7KL3FzKe9C-m6E',
+        'file': open('report.xlsx', 'rb')
+    }
+
+    re = requests.post("http://localhost:8000/service/testTargetUpload/", json=file_user)
+    print(re.text)
+
+
+if __name__ == '__main__':
+    test_software_upload()

+ 0 - 0
apps/__init__.py


BIN
apps/__pycache__/__init__.cpython-39.pyc


+ 0 - 0
apps/log_info/__init__.py


+ 3 - 0
apps/log_info/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/log_info/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class LogInfoConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'apps.log_info'

+ 0 - 0
apps/log_info/migrations/__init__.py


+ 3 - 0
apps/log_info/models.py

@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.

+ 3 - 0
apps/log_info/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 6 - 0
apps/log_info/urls.py

@@ -0,0 +1,6 @@
+from django.urls import path
+from .views.log_list import Log_list
+
+urlpatterns = [
+    path('', Log_list.as_view())
+]

+ 0 - 0
apps/log_info/views/__init__.py


+ 12 - 0
apps/log_info/views/log_list.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Log_list(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # view log_list
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("查看日志列表")

+ 0 - 0
apps/service/__init__.py


BIN
apps/service/__pycache__/__init__.cpython-39.pyc


BIN
apps/service/__pycache__/admin.cpython-39.pyc


BIN
apps/service/__pycache__/apps.cpython-39.pyc


BIN
apps/service/__pycache__/models.cpython-39.pyc


BIN
apps/service/__pycache__/urls.cpython-39.pyc


+ 3 - 0
apps/service/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/service/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class ServiceConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'apps.service'

+ 0 - 0
apps/service/controller/__init__.py


+ 43 - 0
apps/service/controller/test_target_controller.py

@@ -0,0 +1,43 @@
+import os
+
+from django.http import JsonResponse, FileResponse
+from django.shortcuts import render
+from rest_framework.views import APIView
+
+from apps.service.dao.test_target_dao import *
+
+
+class TargetUploadView(APIView):
+    authentication_classes = []
+
+    def post(self, request, *args, **kwargs):
+        software_data = request.FILES.get('software_data')
+        software_name = request.POST.get('software_name')
+        edition = request.POST.get('version')
+        software_type = request.POST.get('software_type')
+
+        create_msg = create(software_name, software_data, edition, software_type)
+        if create_msg['code'] == 1000:
+            return JsonResponse(create_msg)
+
+        with open(os.path.join('media/software', software_data.name), 'wb') as f:
+            f.write(software_data.read())
+        return JsonResponse(create_msg)
+
+
+class TestTargetUploadView(APIView):
+    authentication_classes = []
+
+    def get(self, request, *args, **kwargs):
+        return render(request, 'service/upload.html')
+
+
+class TargetDownload(APIView):
+    authentication_classes = []
+
+    def get(self, request, *args, **kwargs):
+        file = open('media/software/django_jwt_demo.zip', 'rb')
+        response = FileResponse(file)
+        response['Content-Type'] = 'application/octet-stream'
+        response['Content-Disposition'] = 'attachment;filename="BatchPayTemplate.xls"'
+        return response

+ 0 - 0
apps/service/dao/__init__.py


+ 24 - 0
apps/service/dao/test_target_dao.py

@@ -0,0 +1,24 @@
+import datetime
+
+from apps.service.models import Software
+from utils.util_add_id import gen_next_id
+
+
+def create(software_name, software_data, edition, software_type):
+    if Software.objects.filter(software_name=software_name, edition=edition):
+        return {'code': 1000, 'error': '被测试软件已存在,请修改软件名或版本号重新上传'}
+    software_num = None
+    if not Software.objects.last():
+        software_num = "SUT_1"
+    else:
+        software_num = gen_next_id(Software.objects.last().id)
+
+    create_time = update_time = datetime.datetime.utcnow()
+    Software.objects.create(software_name=software_name, software_num=software_num, edition=edition,
+                                          software_type=software_type, software_data=software_data,
+                                          create_time=create_time, update_time=update_time)
+    return {'code': 1001, 'msg': software_name+"创建成功"}
+
+
+if __name__ == '__main__':
+    create(1, 1, 1, 1)

+ 0 - 0
apps/service/migrations/__init__.py


BIN
apps/service/migrations/__pycache__/__init__.cpython-39.pyc


+ 12 - 0
apps/service/models.py

@@ -0,0 +1,12 @@
+from django.db import models
+from apps.user.models import *
+
+
+# Create your models here.
+
+
+
+
+
+
+

+ 18 - 0
apps/service/templates/service/upload.html

@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Upload</title>
+</head>
+<body>
+    <h1>This is a upload page</h1>
+    <form action="/service/TargetUpload/" method="post" enctype="multipart/form-data">
+        {% csrf_token %}
+        <label>
+            <input type="text" name="text_append">
+        </label>
+        <input type="file" name="upload_file">
+        <input type="submit" name="submit">
+    </form>
+</body>
+</html>

+ 3 - 0
apps/service/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 13 - 0
apps/service/urls.py

@@ -0,0 +1,13 @@
+from django.urls import path
+from .views.test_views import *
+from .controller.test_target_controller import *
+
+urlpatterns = [
+    path('', service_page),
+    path('jsontry/', json_try),
+
+    # 上传测试目标
+    path('TargetUpload/', TargetUploadView.as_view()),
+    # 测试目标下载
+    path('TargetDownload/', TargetDownload.as_view())
+]

+ 0 - 0
apps/service/views/__init__.py


+ 11 - 0
apps/service/views/test_views.py

@@ -0,0 +1,11 @@
+from django.shortcuts import render
+from django.http import HttpResponse, JsonResponse
+
+
+# Create your views here.
+def service_page(request):
+    return HttpResponse('这是服务界面')
+
+
+def json_try(request):
+    return JsonResponse({'ret': 1, 'msg': '这是json返回'})

+ 0 - 0
apps/software/__init__.py


+ 3 - 0
apps/software/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/software/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class SoftwareConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'apps.software'

+ 49 - 0
apps/software/migrations/0001_initial.py

@@ -0,0 +1,49 @@
+# Generated by Django 3.2.4 on 2021-06-30 03:10
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Software',
+            fields=[
+                ('name', models.CharField(max_length=50, unique=True, verbose_name='被测试软件名')),
+                ('id', models.CharField(default='Software_1', max_length=20, primary_key=True, serialize=False, unique=True, verbose_name='被测试软件编号')),
+                ('type', models.CharField(max_length=20, verbose_name='被测试软件类型')),
+                ('report', models.FilePathField(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)),
+            ],
+            options={
+                'verbose_name': '被测试软件',
+                'verbose_name_plural': '被测试软件',
+                'db_table': 'software',
+            },
+        ),
+        migrations.CreateModel(
+            name='Version',
+            fields=[
+                ('id', models.CharField(default='Version_1', max_length=20, primary_key=True, serialize=False, unique=True, verbose_name='软件版本')),
+                ('num', models.CharField(max_length=20, verbose_name='版本号')),
+                ('file', models.FilePathField(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)),
+                ('software', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='software.software', verbose_name='所属软件')),
+            ],
+            options={
+                'verbose_name': '软件版本',
+                'verbose_name_plural': '软件版本',
+                'db_table': 'version',
+            },
+        ),
+    ]

+ 0 - 0
apps/software/migrations/__init__.py


+ 38 - 0
apps/software/models.py

@@ -0,0 +1,38 @@
+from django.db import models
+
+
+# Create your models here.
+class Software(models.Model):
+    name = models.CharField(max_length=50, unique=True, verbose_name='被测试软件名')
+    id = models.CharField(max_length=20, unique=True, primary_key=True, verbose_name='被测试软件编号', default='Software_1')
+    type = models.CharField(max_length=20, verbose_name='被测试软件类型')
+    report = models.FilePathField(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)
+
+    def __str__(self):
+        return self.name
+
+    class Meta:
+        verbose_name = '被测试软件'
+        verbose_name_plural = verbose_name
+        db_table = 'software'
+
+
+class Version(models.Model):
+    id = models.CharField(max_length=20, unique=True, primary_key=True, verbose_name='软件版本', default='Version_1')
+    num = models.CharField(max_length=20, verbose_name='版本号')
+    software = models.ForeignKey(Software, on_delete=models.CASCADE, verbose_name='所属软件')
+    file = models.FilePathField(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)
+
+    def __str__(self):
+        return self.software.name + " " + self.num
+
+    class Meta:
+        verbose_name = '软件版本'
+        verbose_name_plural = verbose_name
+        db_table = 'version'

+ 3 - 0
apps/software/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 15 - 0
apps/software/urls.py

@@ -0,0 +1,15 @@
+from django.urls import path
+from .views.software_list import Software_list
+from .views.software_edit import Software_edit
+from .views.report import Report
+from .views.version_create import Version_create
+from .views.version_download import Version_download
+
+urlpatterns = [
+    path('', Software_list.as_view()),
+    path('<str:id>', Software_edit.as_view()),
+    path('<str:id>/report', Report.as_view()),
+    path('<str:id>/versions', Version_create.as_view()),
+    path('<str:id>/versions/<str:version>', Version_create.as_view()),
+    path('<str:id>/versions/<str:version>/download', Version_download.as_view())
+]

+ 0 - 0
apps/software/views/__init__.py


+ 12 - 0
apps/software/views/report.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Report(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # generate report
+    @staticmethod
+    def post(request, *args, **kwargs):
+        return HttpResponse("生成测试报告")

+ 22 - 0
apps/software/views/software_edit.py

@@ -0,0 +1,22 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Software_edit(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # view software
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("查看测试目标")
+
+    # edit software
+    @staticmethod
+    def put(request, *args, **kwargs):
+        return HttpResponse("编辑目标列表")
+
+    # delete software
+    @staticmethod
+    def delete(request, *args, **kwargs):
+        return HttpResponse("删除目标列表")

+ 17 - 0
apps/software/views/software_list.py

@@ -0,0 +1,17 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Software_list(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create software
+    @staticmethod
+    def post(request, *args, **kwargs):
+        return HttpResponse("新建测试目标")
+
+    # software list
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("测试目标列表")

+ 12 - 0
apps/software/views/version_create.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Version_create(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create version
+    @staticmethod
+    def post(request, *args, **kwargs):
+        return HttpResponse("新建被测软件版本")

+ 12 - 0
apps/software/views/version_download.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Version_download(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # download version
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("下载被测软件版本")

+ 17 - 0
apps/software/views/version_edit.py

@@ -0,0 +1,17 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Version_edit(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # edit version
+    @staticmethod
+    def put(request, *args, **kwargs):
+        return HttpResponse("编辑被测软件版本")
+
+    # edit version
+    @staticmethod
+    def delete(request, *args, **kwargs):
+        return HttpResponse("删除被测软件版本")

+ 0 - 0
apps/test_plan/__init__.py


+ 3 - 0
apps/test_plan/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/test_plan/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class TestPlanConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'apps.test_plan'

+ 37 - 0
apps/test_plan/migrations/0001_initial.py

@@ -0,0 +1,37 @@
+# Generated by Django 3.2.4 on 2021-06-30 03:10
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('software', '0001_initial'),
+        ('user', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='TestPlan',
+            fields=[
+                ('id', models.CharField(default='TP_1', max_length=20, primary_key=True, serialize=False, unique=True, verbose_name='测试计划编号')),
+                ('title', models.CharField(max_length=30, verbose_name='测试计划标题')),
+                ('version', models.CharField(max_length=20, verbose_name='软件版本')),
+                ('state', models.CharField(max_length=20, verbose_name='测试计划执行状态')),
+                ('description', models.TextField(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)),
+                ('executor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='user.user', verbose_name='测试计划执行者')),
+                ('software', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='software.software', verbose_name='测试软件')),
+            ],
+            options={
+                'verbose_name': '测试计划',
+                'verbose_name_plural': '测试计划',
+                'db_table': 'test_plan',
+            },
+        ),
+    ]

+ 0 - 0
apps/test_plan/migrations/__init__.py


+ 26 - 0
apps/test_plan/models.py

@@ -0,0 +1,26 @@
+from django.db import models
+
+# Create your models here.
+from apps.software.models import Software
+from apps.user.models import User
+
+
+class TestPlan(models.Model):
+    id = models.CharField(max_length=20, unique=True, primary_key=True, verbose_name='测试计划编号', default='TP_1')
+    title = models.CharField(max_length=30, verbose_name='测试计划标题')
+    software = models.ForeignKey(Software, on_delete=models.CASCADE, verbose_name='测试软件')
+    version = models.CharField(max_length=20, verbose_name='软件版本')
+    executor = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name='测试计划执行者')
+    state = models.CharField(max_length=20, verbose_name='测试计划执行状态')
+    description = models.TextField(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)
+
+    def __str__(self):
+        return self.title
+
+    class Meta:
+        verbose_name = '测试计划'
+        verbose_name_plural = verbose_name
+        db_table = 'test_plan'

+ 3 - 0
apps/test_plan/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 8 - 0
apps/test_plan/urls.py

@@ -0,0 +1,8 @@
+from django.urls import path
+from .views.plan_list import Plan_list
+from .views.plan_edit import Plan_edit
+
+urlpatterns = [
+    path('', Plan_list.as_view()),
+    path('<str:id>', Plan_edit.as_view())
+]

+ 0 - 0
apps/test_plan/views/__init__.py


+ 22 - 0
apps/test_plan/views/plan_edit.py

@@ -0,0 +1,22 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Plan_edit(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # view test_plan
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("查看测试计划")
+
+    # edit plan_list
+    @staticmethod
+    def put(request, *args, **kwargs):
+        return HttpResponse("编辑测试计划")
+
+    # delete plan_list
+    @staticmethod
+    def delete(request, *args, **kwargs):
+        return HttpResponse("删除测试计划")

+ 17 - 0
apps/test_plan/views/plan_list.py

@@ -0,0 +1,17 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Plan_list(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create plan
+    @staticmethod
+    def post(request, *args, **kwargs):
+        return HttpResponse("创建测试计划")
+
+    # view plan_list
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("查看测试计划列表")

+ 0 - 0
apps/test_task/__init__.py


+ 3 - 0
apps/test_task/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
apps/test_task/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class TestTaskConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'apps.test_task'

+ 59 - 0
apps/test_task/migrations/0001_initial.py

@@ -0,0 +1,59 @@
+# Generated by Django 3.2.4 on 2021-06-30 03:10
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('test_plan', '0001_initial'),
+        ('user', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='TestTask',
+            fields=[
+                ('id', models.CharField(default='TK_1', max_length=20, primary_key=True, serialize=False, unique=True, verbose_name='测试任务编号')),
+                ('title', models.CharField(max_length=50, verbose_name='测试任务标题')),
+                ('state', models.CharField(max_length=20, verbose_name='测试任务状态')),
+                ('desc', models.TextField(verbose_name='测试任务描述')),
+                ('file', models.FilePathField(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)),
+                ('executor', models.ManyToManyField(to='user.User', verbose_name='测试任务执行者')),
+                ('plan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='test_plan.testplan', verbose_name='测试任务所属计划')),
+            ],
+            options={
+                'verbose_name': '测试任务',
+                'verbose_name_plural': '测试任务',
+                'db_table': 'test_task',
+            },
+        ),
+        migrations.CreateModel(
+            name='TestCase',
+            fields=[
+                ('id', models.CharField(default='TC_1', max_length=20, primary_key=True, serialize=False, unique=True, verbose_name='测试用例编号')),
+                ('title', models.CharField(max_length=50, verbose_name='测试用例标题')),
+                ('state', models.CharField(max_length=20, verbose_name='测试用例状态')),
+                ('requisite', models.TextField(blank=True, verbose_name='测试输入项')),
+                ('process', models.TextField(verbose_name='测试步骤')),
+                ('expected_results', models.TextField(verbose_name='预期结果')),
+                ('actual_results', models.TextField(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)),
+                ('assessor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_assessor', to='user.user', verbose_name='测试用例评审员')),
+                ('executor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_executor', to='user.user', verbose_name='测试用例执行者')),
+            ],
+            options={
+                'verbose_name': '测试用例',
+                'verbose_name_plural': '测试用例',
+                'db_table': 'test_case',
+            },
+        ),
+    ]

+ 0 - 0
apps/test_task/migrations/__init__.py


+ 51 - 0
apps/test_task/models.py

@@ -0,0 +1,51 @@
+from django.db import models
+
+# Create your models here.
+from apps.test_plan.models import TestPlan
+from apps.user.models import User
+
+
+class TestTask(models.Model):
+    id = models.CharField(max_length=20, unique=True, primary_key=True, verbose_name='测试任务编号', default='TK_1')
+    title = models.CharField(max_length=50, verbose_name='测试任务标题')
+    executor = models.ManyToManyField(User, verbose_name='测试任务执行者')
+    state = models.CharField(max_length=20, verbose_name='测试任务状态')
+    desc = models.TextField(verbose_name='测试任务描述')
+    plan = models.ForeignKey(TestPlan, on_delete=models.CASCADE, verbose_name='测试任务所属计划')
+    file = models.FilePathField(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)
+
+    def __str__(self):
+        return self.title
+
+    class Meta:
+        verbose_name = '测试任务'
+        verbose_name_plural = verbose_name
+        db_table = 'test_task'
+
+
+class TestCase(models.Model):
+    id = models.CharField(max_length=20, unique=True, primary_key=True, verbose_name='测试用例编号', default='TC_1')
+    title = models.CharField(max_length=50, verbose_name='测试用例标题')
+    state = models.CharField(max_length=20, verbose_name='测试用例状态')
+    executor = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name='测试用例执行者',
+                                 related_name='case_executor')
+    assessor = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name='测试用例评审员',
+                                 related_name='case_assessor')
+    requisite = models.TextField(blank=True, verbose_name='测试输入项')
+    process = models.TextField(verbose_name='测试步骤')
+    expected_results = models.TextField(verbose_name='预期结果')
+    actual_results = models.TextField(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)
+
+    def __str__(self):
+        return self.title
+
+    class Meta:
+        verbose_name = '测试用例'
+        verbose_name_plural = verbose_name
+        db_table = 'test_case'

+ 3 - 0
apps/test_task/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 10 - 0
apps/test_task/urls.py

@@ -0,0 +1,10 @@
+from django.urls import path
+from .views import task_list, task_edit, task_execute, task_delete, test_case
+
+urlpatterns = [
+    path('', task_list.Task_list.as_view()),
+    path('<str:id>', task_delete.Task_delete.as_view()),
+    path('<str:id>/edit', task_edit.Task_edit.as_view()),
+    path('<str:id>/execute', task_execute.Task_execute.as_view()),
+    path('<str:id>/test-case', test_case.Test_case.as_view())
+]

+ 0 - 0
apps/test_task/views/__init__.py


+ 12 - 0
apps/test_task/views/task_delete.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Task_delete(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # delete task
+    @staticmethod
+    def delete(request, *args, **kwargs):
+        return HttpResponse("删除测试任务")

+ 12 - 0
apps/test_task/views/task_edit.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Task_edit(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # edit task
+    @staticmethod
+    def put(request, *args, **kwargs):
+        return HttpResponse("编辑测试任务")

+ 12 - 0
apps/test_task/views/task_execute.py

@@ -0,0 +1,12 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Task_execute(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # execute task
+    @staticmethod
+    def put(request, *args, **kwargs):
+        return HttpResponse("执行测试任务")

+ 17 - 0
apps/test_task/views/task_list.py

@@ -0,0 +1,17 @@
+from rest_framework.views import APIView
+from django.http import HttpResponse
+
+
+class Task_list(APIView):
+    # 登录权限验证
+    authentication_classes = []
+
+    # create task
+    @staticmethod
+    def post(request, *args, **kwargs):
+        return HttpResponse("创建测试任务")
+
+    # view task_list
+    @staticmethod
+    def get(request, *args, **kwargs):
+        return HttpResponse("查看测试任务列表")

Vissa filer visades inte eftersom för många filer har ändrats