diff --git a/MangoActuator/Dockerfile b/MangoActuator/Dockerfile index a9b8c6de..cbade880 100644 --- a/MangoActuator/Dockerfile +++ b/MangoActuator/Dockerfile @@ -1,29 +1,7 @@ -FROM python:3.10.16-slim +FROM mcr.microsoft.com/playwright/python:latest WORKDIR /app -RUN echo "deb http://mirrors.aliyun.com/debian bookworm main non-free non-free-firmware" > /etc/apt/sources.list && \ - echo "deb http://mirrors.aliyun.com/debian bookworm-updates main non-free non-free-firmware" >> /etc/apt/sources.list && \ - echo "deb http://mirrors.aliyun.com/debian bookworm-backports main non-free non-free-firmware" >> /etc/apt/sources.list && \ - echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main non-free non-free-firmware" >> /etc/apt/sources.list -RUN apt-get update && apt-get install -y \ - libnss3 \ - libatk1.0-0 \ - libatk-bridge2.0-0 \ - libcups2 \ - libdrm2 \ - libxkbcommon0 \ - libxcomposite1 \ - libxdamage1 \ - libxfixes3 \ - libxrandr2 \ - libgbm1 \ - libasound2 \ - libpango-1.0-0 \ - libpangocairo-1.0-0 \ - && rm -rf /var/lib/apt/lists/* COPY . . -RUN pip install --no-cache-dir --user -r linux_requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ -ENV PLAYWRIGHT_DOWNLOAD_HOST=https://registry.npmmirror.com/-/binary/playwright -RUN playwright install chromium +RUN pip install --no-cache-dir --user -r linux_requirements.txt -i https://mirror.sjtu.edu.cn/pypi/web/simple/ CMD ["python", "start_linux.py", "--ip=121.37.174.56", "--port=8000", "--username=admin", "--password=as123456"] \ No newline at end of file diff --git a/MangoActuator/src/consumer/__init__.py b/MangoActuator/src/consumer/__init__.py index 474c2880..952f98d9 100644 --- a/MangoActuator/src/consumer/__init__.py +++ b/MangoActuator/src/consumer/__init__.py @@ -6,6 +6,7 @@ import asyncio import json import traceback +import time from mangokit import singleton from src.consumer.api import API @@ -13,7 +14,9 @@ from src.consumer.perf import Perf from src.consumer.tools import Tools from src.consumer.ui import UI from src.models.socket_model import QueueModel +from src.models.ui_model import PageObject, GetTaskModel from src.models.user_model import UserModel +from src.settings import settings from src.tools.log_collector import log @@ -34,12 +37,36 @@ class SocketConsumer(UI, API, Perf, Tools): await cls.queue.put(task) async def consumer(self): + s = time.time() while True: if not self.queue.empty(): data: QueueModel = await self.queue.get() task = self.parent.loop.create_task(getattr(self, data.func_name)(data.func_args)) task.add_done_callback(self.handle_task_result) - await asyncio.sleep(0.2) + if time.time() - s > 5: + s = time.time() + await self.get_case() + else: + await asyncio.sleep(0.2) + + async def get_case(self): + try: + if PageObject.case_flow is not None: + from src.network import UiSocketEnum, WebSocketClient + if PageObject.case_flow.running_tasks < PageObject.case_flow.max_tasks \ + or PageObject.case_flow.queue.empty(): + await WebSocketClient().async_send( + '请求获取任务', + func_name=UiSocketEnum.GET_TASK.value, + func_args=GetTaskModel(username=settings.USERNAME) + ) + self.parent.set_tips_info('正在主动获取任务') + else: + from src.services.ui.service.case_flow import CaseFlow + PageObject.case_flow = CaseFlow(self.parent) + except Exception as error: + traceback.print_exc() + log.error(f'获取任务异常:{error}') @classmethod def handle_task_result(cls, task): @@ -76,7 +103,6 @@ class Test: if __name__ == '__main__': - from src.settings import settings from src.network.http import HTTP settings.IP = '121.37.174.56' diff --git a/MangoActuator/src/enums/gui_enum.py b/MangoActuator/src/enums/gui_enum.py index 6b8c142b..bf502846 100644 --- a/MangoActuator/src/enums/gui_enum.py +++ b/MangoActuator/src/enums/gui_enum.py @@ -6,13 +6,6 @@ from src.enums import BaseEnum -class InputEnum(BaseEnum): - INPUT = 0 - SELECT = 1 - CASCADER = 2 - TOGGLE = 3 - - class TipsTypeEnum(BaseEnum): ERROR = 0 SUCCESS = 1 diff --git a/MangoActuator/src/models/ui_model.py b/MangoActuator/src/models/ui_model.py index 8b70ce8e..8a20410d 100644 --- a/MangoActuator/src/models/ui_model.py +++ b/MangoActuator/src/models/ui_model.py @@ -131,7 +131,7 @@ class PageStepsResultModel(BaseModel): cache_data: dict test_object: dict # url或者软件包 - equipment: dict # 设备名称或者浏览器类型 + equipment: EquipmentModel # 设备名称或者浏览器类型 status: int error_message: str | None = None @@ -151,6 +151,10 @@ class UiCaseResultModel(BaseModel): steps: list[PageStepsResultModel] = [] +class GetTaskModel(BaseModel): + username: str + + class PageObject: test_page_steps = None case_flow = None diff --git a/MangoActuator/src/network/web_socket/socket_api_enum.py b/MangoActuator/src/network/web_socket/socket_api_enum.py index b04bb506..67ca50ef 100644 --- a/MangoActuator/src/network/web_socket/socket_api_enum.py +++ b/MangoActuator/src/network/web_socket/socket_api_enum.py @@ -17,6 +17,7 @@ class UiSocketEnum(Enum): PAGE_STEPS = 'u_page_steps' # 步骤详情 TEST_CASE = 'u_test_case' # TEST_CASE_BATCH = 'u_test_suite_details' # + GET_TASK = 'u_get_task' # class ToolsSocketEnum(Enum): diff --git a/MangoActuator/src/network/web_socket/websocket_client.py b/MangoActuator/src/network/web_socket/websocket_client.py index 6c2522bd..87ec2b4b 100644 --- a/MangoActuator/src/network/web_socket/websocket_client.py +++ b/MangoActuator/src/network/web_socket/websocket_client.py @@ -45,7 +45,7 @@ class WebSocketClient: res = self.__output_method(response_str) if res.code == 200: await self.async_send(f'{ClientNameEnum.DRIVER.value} 连接服务成功!', - is_notice=ClientTypeEnum.WEB) + is_notice=ClientTypeEnum.WEB) self.parent.set_tips_info("心跳已连接") return True else: @@ -94,7 +94,7 @@ class WebSocketClient: async def async_send(self, msg: str, code: int = 200, - func_name: None = None, + func_name: None | str = None, func_args: Optional[Union[list[T], T]] | None = None, is_notice: ClientTypeEnum | None = None, ): @@ -107,14 +107,17 @@ class WebSocketClient: ) if func_name: send_data.data = QueueModel(func_name=func_name, func_args=func_args) - try: - if not settings.IS_DEBUG or self.websocket: + + if self.websocket and self.websocket.open: + try: await self.websocket.send(self.__serialize(send_data)) - else: - self.__serialize(send_data) - except WebSocketException: - await self.client_run() - await self.websocket.send(self.__serialize(send_data)) + except WebSocketException: + await self.client_run() + if self.websocket and self.websocket.open: + await self.websocket.send(self.__serialize(send_data)) + else: + if settings.IS_DEBUG: + log.debug(f"调试模式:序列化数据 ->{self.__serialize(send_data)}") def sync_send(self, msg: str, diff --git a/MangoActuator/src/services/ui/service/page_steps.py b/MangoActuator/src/services/ui/service/page_steps.py index f8f179ff..0f116a75 100644 --- a/MangoActuator/src/services/ui/service/page_steps.py +++ b/MangoActuator/src/services/ui/service/page_steps.py @@ -36,7 +36,7 @@ class PageSteps(ElementOperation): case_step_details_id=self.page_steps_model.case_step_details_id, cache_data={}, test_object={}, - equipment={}, + equipment=self.page_steps_model.equipment_config, status=StatusEnum.FAIL.value, element_result_list=[] ) @@ -72,7 +72,7 @@ class PageSteps(ElementOperation): self.progress.emit(element_result) self.page_step_result_model.cache_data = self.test_data.get_all() self.page_step_result_model.test_object = {'url': self.url, 'package_name': self.package_name} - self.page_step_result_model.equipment = {'name': self.driver_object.web.config} + self.page_step_result_model.equipment = self.driver_object.web.config self.page_step_result_model.element_result_list.append(element_result) @async_memory diff --git a/MangoServer/src/auto_test/auto_system/models.py b/MangoServer/src/auto_test/auto_system/models.py index 4006e152..ab7ae9cd 100644 --- a/MangoServer/src/auto_test/auto_system/models.py +++ b/MangoServer/src/auto_test/auto_system/models.py @@ -253,7 +253,7 @@ class TestSuite(models.Model): project_product = models.ForeignKey(to=ProjectProduct, to_field="id", on_delete=models.PROTECT) test_env = models.SmallIntegerField(verbose_name="测试环境") user = models.ForeignKey(to=User, to_field="id", verbose_name='用例执行人', on_delete=models.PROTECT) - tasks = models.ForeignKey(to=Tasks, to_field="id",on_delete=models.SET_NULL, null=True) + tasks = models.ForeignKey(to=Tasks, to_field="id", on_delete=models.SET_NULL, null=True) status = models.SmallIntegerField(verbose_name="测试结果") is_notice = models.SmallIntegerField(verbose_name="是否发送通知") @@ -272,7 +272,7 @@ class TestSuiteDetails(models.Model): create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True) update_time = models.DateTimeField(verbose_name="修改时间", auto_now=True) test_suite = models.ForeignKey(to=TestSuite, to_field="id", on_delete=models.PROTECT) - # type=0是UI,=1是接口,=2是性能 + # type=0是UI,=1是接口,=2是pytest type = models.SmallIntegerField(verbose_name="类型") project_product = models.ForeignKey(to=ProjectProduct, to_field="id", on_delete=models.PROTECT) test_env = models.SmallIntegerField(verbose_name="测试环境") diff --git a/MangoServer/src/auto_test/auto_system/service/consumer.py b/MangoServer/src/auto_test/auto_system/service/consumer.py index 7c1260ea..007a27f1 100644 --- a/MangoServer/src/auto_test/auto_system/service/consumer.py +++ b/MangoServer/src/auto_test/auto_system/service/consumer.py @@ -40,7 +40,8 @@ class ConsumerThread: try: test_suite_details = TestSuiteDetails.objects.filter( status=TaskEnum.STAY_BEGIN.value, - retry__lt=self.retry_frequency + retry__lt=self.retry_frequency, + type__in=[TestCaseTypeEnum.API.value, TestCaseTypeEnum.PYTEST.value] ).first() if test_suite_details: test_suite = TestSuite.objects.get(id=test_suite_details.test_suite.id) diff --git a/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/__init__.py b/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/__init__.py index 4a9f57fe..7754c465 100644 --- a/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/__init__.py +++ b/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/__init__.py @@ -9,10 +9,10 @@ import traceback from django.dispatch import Signal +from mangokit import singleton from src.models.socket_model import QueueModel from src.settings import DEBUG from src.tools.log_collector import log -from mangokit import singleton from .api_consumer import APIConsumer from .perf_consumer import PerfConsumer from .system_consumer import SystemConsumer @@ -32,7 +32,7 @@ class ServerInterfaceReflection(APIConsumer, SystemConsumer, UIConsumer, PerfCon data = kwargs.get('data') if isinstance(data, QueueModel): if DEBUG: - log.system.info(f"开始处理接收的消息:{data.model_dump_json()}") + log.system.warning(f"开始处理接收的消息:{data.model_dump_json()}") future = self.executor.submit(getattr(self, data.func_name), data.func_args) future.add_done_callback(self.handle_task_result) # 添加任务完成后的回调函数 else: diff --git a/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/ui_consumer.py b/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/ui_consumer.py index b5afa677..8668e787 100644 --- a/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/ui_consumer.py +++ b/MangoServer/src/auto_test/auto_system/service/socket_link/server_interface_reflection/ui_consumer.py @@ -4,9 +4,10 @@ # @Time : 2023-04-29 11:20 # @Author : 毛鹏 from src.auto_test.auto_system.service.update_test_suite import UpdateTestSuite +from src.auto_test.auto_ui.service.test_case.case_flow import UiCaseFlow from src.auto_test.auto_ui.service.test_report_writing import TestReportWriting from src.models.system_model import TestSuiteDetailsResultModel -from src.models.ui_model import PageStepsResultModel, UiCaseResultModel +from src.models.ui_model import PageStepsResultModel, UiCaseResultModel, GetTaskModel from src.tools.decorator.convert_args import convert_args @@ -26,3 +27,8 @@ class UIConsumer: @convert_args(UiCaseResultModel) def u_test_case(cls, data: UiCaseResultModel): TestReportWriting.update_test_case(data) + + @classmethod + @convert_args(GetTaskModel) + def u_get_task(cls, data: GetTaskModel): + UiCaseFlow.get_case(data) diff --git a/MangoServer/src/auto_test/auto_system/urls.py b/MangoServer/src/auto_test/auto_system/urls.py index 19a6d012..6cd240b3 100644 --- a/MangoServer/src/auto_test/auto_system/urls.py +++ b/MangoServer/src/auto_test/auto_system/urls.py @@ -62,6 +62,7 @@ urlpatterns = [ path('test/suite/details/report', TestSuiteDetailsViews.as_view({'get': 'test_suite_details_report'})), path('test/suite/details/all/retry', TestSuiteDetailsViews.as_view({'get': 'get_all_retry'})), path('test/suite/details/retry', TestSuiteDetailsViews.as_view({'get': 'get_retry'})), + path('test/suite/details/summary', TestSuiteDetailsViews.as_view({'get': 'get_summary'})), # path('index/sum', IndexViews.as_view({'get': 'case_sum'})), path('index/result/week/sum', IndexViews.as_view({'get': 'case_result_week_sum'})), diff --git a/MangoServer/src/auto_test/auto_system/views/tasks_details.py b/MangoServer/src/auto_test/auto_system/views/tasks_details.py index dbf50aad..449596f9 100644 --- a/MangoServer/src/auto_test/auto_system/views/tasks_details.py +++ b/MangoServer/src/auto_test/auto_system/views/tasks_details.py @@ -4,7 +4,6 @@ # @Time : 2023-03-25 13:25 # @Author : 毛鹏 -from django.forms.models import model_to_dict from rest_framework import serializers from rest_framework.decorators import action from rest_framework.request import Request @@ -12,10 +11,10 @@ from rest_framework.viewsets import ViewSet from src.auto_test.auto_api.models import ApiCase from src.auto_test.auto_api.views.api_case import ApiCaseSerializers -from src.auto_test.auto_ui.views.ui_case import UiCaseSerializers from src.auto_test.auto_system.models import TasksDetails from src.auto_test.auto_system.views.tasks import TasksSerializers from src.auto_test.auto_ui.models import UiCase +from src.auto_test.auto_ui.views.ui_case import UiCaseSerializers from src.enums.tools_enum import TestCaseTypeEnum from src.tools.decorator.error_response import error_response from src.tools.view.model_crud import ModelCRUD diff --git a/MangoServer/src/auto_test/auto_system/views/test_suite_details.py b/MangoServer/src/auto_test/auto_system/views/test_suite_details.py index 51259d58..120d04d6 100644 --- a/MangoServer/src/auto_test/auto_system/views/test_suite_details.py +++ b/MangoServer/src/auto_test/auto_system/views/test_suite_details.py @@ -13,7 +13,7 @@ from rest_framework.viewsets import ViewSet from src.auto_test.auto_system.models import TestSuiteDetails from src.auto_test.auto_system.views.project_product import ProjectProductSerializersC from src.auto_test.auto_system.views.test_suite import TestSuiteSerializers -from src.enums.tools_enum import StatusEnum, TaskEnum +from src.enums.tools_enum import StatusEnum, TaskEnum, TestCaseTypeEnum from src.tools.decorator.error_response import error_response from src.tools.view import * from src.tools.view.model_crud import ModelCRUD @@ -168,3 +168,19 @@ class TestSuiteDetailsViews(ViewSet): data['fail'] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] data['success'] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] return ResponseData.success(RESPONSE_MSG_0129, data) + + @action(methods=['get'], detail=False) + @error_response('system') + def get_summary(self, request: Request): + test_suite_id = request.query_params.get('test_suite_id') + model = self.model.objects.filter(test_suite_id=test_suite_id) + return ResponseData.success(RESPONSE_MSG_0065, { + 'count': model.count(), + 'fail_count': model.filter(status=TaskEnum.FAIL.value).count(), + 'success_count': model.filter(status=TaskEnum.SUCCESS.value).count(), + 'stay_begin_count': model.filter(status=TaskEnum.STAY_BEGIN.value).count(), + 'proceed_count': model.filter(status=TaskEnum.PROCEED.value).count(), + 'api_count': model.filter(type=TestCaseTypeEnum.API.value).count(), + 'ui_count': model.filter(type=TestCaseTypeEnum.UI.value).count(), + 'pytest_count': model.filter(type=TestCaseTypeEnum.PYTEST.value).count(), + }) diff --git a/MangoServer/src/auto_test/auto_ui/service/test_case/case_flow.py b/MangoServer/src/auto_test/auto_ui/service/test_case/case_flow.py index c9a20afd..311dfdb1 100644 --- a/MangoServer/src/auto_test/auto_ui/service/test_case/case_flow.py +++ b/MangoServer/src/auto_test/auto_ui/service/test_case/case_flow.py @@ -5,17 +5,20 @@ # @Author : 毛鹏 import time +from django.utils import timezone from src.auto_test.auto_system.models import TestSuite, TestSuiteDetails from src.auto_test.auto_system.service.socket_link.socket_user import SocketUser -from src.auto_test.auto_ui.service.test_case.test_case import TestCase -from src.enums.tools_enum import TaskEnum +from src.auto_test.auto_user.models import User +from src.enums.tools_enum import TaskEnum, TestCaseTypeEnum from src.models.system_model import ConsumerCaseModel +from src.models.ui_model import GetTaskModel from src.tools.log_collector import log class UiCaseFlow: current_index = 0 + retry_frequency = 3 @classmethod def execute_task(cls, case_model: ConsumerCaseModel, retry=0, max_retry=3): @@ -31,33 +34,65 @@ class UiCaseFlow: except IndexError: time.sleep(3) return cls.execute_task(case_model, retry, max_retry) + cls.send_case(user.user_id, user.username, case_model) + + @classmethod + def add_task(cls, case_model: ConsumerCaseModel): + cls.execute_task(case_model) + + @classmethod + def get_case(cls, data: GetTaskModel): + model = User.objects.get(name=data.username) + test_suite_details = TestSuiteDetails.objects.filter( + status=TaskEnum.STAY_BEGIN.value, + retry__lt=cls.retry_frequency, + type=TestCaseTypeEnum.UI.value + ).first() + if test_suite_details: + test_suite = TestSuite.objects.get(id=test_suite_details.test_suite.id) + case_model = ConsumerCaseModel( + test_suite_details=test_suite_details.id, + test_suite=test_suite_details.test_suite.id, + case_id=test_suite_details.case_id, + test_env=test_suite_details.test_env, + user_id=test_suite.user.id, + tasks_id=test_suite.tasks.id if test_suite.tasks else None, + ) + cls.send_case(model.id, model.username, case_model) + cls.update_status_proceed(test_suite, test_suite_details) + + @classmethod + def update_status_proceed(cls, test_suite, test_suite_details): + test_suite.status = TaskEnum.PROCEED.value + test_suite.save() + + test_suite_details.status = TaskEnum.PROCEED.value + test_suite_details.retry += 1 + test_suite_details.push_time = timezone.now() + test_suite_details.save() + + @classmethod + def send_case(cls, user_id, username, case_model): + from src.auto_test.auto_ui.service.test_case.test_case import TestCase send_case = TestCase( - user_id=user.user_id, - username=user.username, + user_id=user_id, + username=username, test_env=case_model.test_env, tasks_id=case_model.tasks_id, is_send=True ) inspect = send_case.inspect_environment_config(case_model.case_id) if not inspect: - if retry > max_retry: - test_suite = TestSuite.objects.get(id=case_model.test_suite) - test_suite.status = TaskEnum.FAIL.value - test_suite.save() - test_suite_details = TestSuiteDetails.objects.get(id=case_model.test_suite_details) - test_suite_details.status = TaskEnum.FAIL.value - test_suite_details.error_message = f'你配置了不同UI自动化类型,但是你没有准备好UI设备配置,请先前往界面自动化->设备配置中添加配置!' - test_suite.save() - else: - time.sleep(3) - return cls.execute_task(case_model, retry, max_retry) + test_suite = TestSuite.objects.get(id=case_model.test_suite) + test_suite.status = TaskEnum.FAIL.value + test_suite.save() + test_suite_details = TestSuiteDetails.objects.get(id=case_model.test_suite_details) + test_suite_details.status = TaskEnum.FAIL.value + test_suite_details.error_message = f'你配置了不同UI自动化类型,但是你没有准备好UI设备配置,请先前往界面自动化->设备配置中添加配置!' + test_suite.save() else: send_case.test_case( case_id=case_model.case_id, test_suite=case_model.test_suite, test_suite_details=case_model.test_suite_details ) - - @classmethod - def add_task(cls, case_model: ConsumerCaseModel): - cls.execute_task(case_model) diff --git a/MangoServer/src/models/ui_model.py b/MangoServer/src/models/ui_model.py index 4bb026de..1520c3ae 100644 --- a/MangoServer/src/models/ui_model.py +++ b/MangoServer/src/models/ui_model.py @@ -148,3 +148,7 @@ class UiCaseResultModel(BaseModel): error_message: str | None = None video_path: str | None = None steps: list[PageStepsResultModel] + + +class GetTaskModel(BaseModel): + username: str diff --git a/MangoServer/src/settings/dev.py b/MangoServer/src/settings/dev.py index a46f4a80..8d626622 100644 --- a/MangoServer/src/settings/dev.py +++ b/MangoServer/src/settings/dev.py @@ -15,7 +15,7 @@ MYSQL_PORT = 3306 MYSQL_DB_NAME = 'dev_mango_server' MYSQL_USER = 'root' MYSQL_PASSWORD = 'mP123456&' -MYSQL_IP = '172.25.239.230' +MYSQL_IP = '172.19.85.178' # ************************ DEBUG配置 ************************ # # 这里也控制了是否使用minio diff --git a/mango-console/.env.dev b/mango-console/.env.dev index 142d26ea..a0119bc6 100644 --- a/mango-console/.env.dev +++ b/mango-console/.env.dev @@ -3,4 +3,4 @@ VITE_APP_ENV='dev' VITE_APP_BASE_URL = 'http://127.0.0.1:8000' VITE_APP_SOCKET_URL = 'ws://127.0.0.1:8000/web/socket?' VITE_APP_MINIO_URL = 'http://127.0.0.1:8000' -VITE_IS_INDEX_WINDOW = 'true' \ No newline at end of file +VITE_IS_INDEX_WINDOW = 'false' \ No newline at end of file diff --git a/mango-console/components.d.ts b/mango-console/components.d.ts index 405a34e1..c2f9ae72 100644 --- a/mango-console/components.d.ts +++ b/mango-console/components.d.ts @@ -67,7 +67,6 @@ declare module 'vue' { ATreeSelect: typeof import('@arco-design/web-vue')['TreeSelect'] DeleteButton: typeof import('./src/components/DeleteButton.vue')['default'] IconSelector: typeof import('./src/components/IconSelector.vue')['default'] - MarkdownEditor: typeof import('./src/components/MarkdownEditor.vue')['default'] MessageContent: typeof import('./src/components/MessageContent.vue')['default'] ModalDialog: typeof import('./src/components/ModalDialog.vue')['default'] PasswordStrong: typeof import('./src/components/PasswordStrong.vue')['default'] diff --git a/mango-console/src/api/system/test_sute_details.ts b/mango-console/src/api/system/test_sute_details.ts index bd3eb8dd..6e222ba1 100644 --- a/mango-console/src/api/system/test_sute_details.ts +++ b/mango-console/src/api/system/test_sute_details.ts @@ -8,6 +8,7 @@ export function getSystemTestSuiteDetails(test_suite_id: number) { }, }) } + export function postSystemTestSuiteDetails(data: object) { return post({ url: 'system/test/suite/details', @@ -16,6 +17,7 @@ export function postSystemTestSuiteDetails(data: object) { }, }) } + export function putSystemTestSuiteDetails(data: object) { return put({ url: 'system/test/suite/details', @@ -35,6 +37,7 @@ export function deleteSystemTestSuiteDetails(id: number | string[] | number[]) { }, }) } + export function getSystemTestSuiteDetailsReport() { return get({ url: 'system/test/suite/details/report', @@ -43,6 +46,7 @@ export function getSystemTestSuiteDetailsReport() { }, }) } + export function getSystemTestSuiteDetailsAllRetry(test_suite_id: number) { return get({ url: 'system/test/suite/details/all/retry', @@ -51,3 +55,12 @@ export function getSystemTestSuiteDetailsAllRetry(test_suite_id: number) { }, }) } + +export function getSystemTestSuiteDetailsSummary(test_suite_id: number) { + return get({ + url: 'system/test/suite/details/summary', + data: () => { + return { test_suite_id: test_suite_id } + }, + }) +} diff --git a/mango-console/src/components/ApiTestReport.vue b/mango-console/src/components/ApiTestReport.vue new file mode 100644 index 00000000..d032d3ba --- /dev/null +++ b/mango-console/src/components/ApiTestReport.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/mango-console/src/components/CodeEditor.vue b/mango-console/src/components/CodeEditor.vue index 71575031..cbc5de83 100644 --- a/mango-console/src/components/CodeEditor.vue +++ b/mango-console/src/components/CodeEditor.vue @@ -3,7 +3,7 @@ diff --git a/mango-console/src/components/MarkdownEditor.vue b/mango-console/src/components/MarkdownEditor.vue deleted file mode 100644 index 70f4efa9..00000000 --- a/mango-console/src/components/MarkdownEditor.vue +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mango-console/src/hooks/table.ts b/mango-console/src/hooks/table.ts index b8e43cc9..ce69555c 100644 --- a/mango-console/src/hooks/table.ts +++ b/mango-console/src/hooks/table.ts @@ -107,7 +107,7 @@ export const useTableColumn = function ( export const useTableIndexColumn = function () { return { - title: '序号', + title: 'ID', key: 'index', width: 80, dataIndex: 'index', diff --git a/mango-console/src/views/report/details/index.vue b/mango-console/src/views/report/details/index.vue index 648d9249..f9a71873 100644 --- a/mango-console/src/views/report/details/index.vue +++ b/mango-console/src/views/report/details/index.vue @@ -1,7 +1,7 @@ diff --git a/mango-console/src/views/uitest/page-steps/details/index.vue b/mango-console/src/views/uitest/page-steps/details/index.vue index 174b780f..db0a6ad3 100644 --- a/mango-console/src/views/uitest/page-steps/details/index.vue +++ b/mango-console/src/views/uitest/page-steps/details/index.vue @@ -27,7 +27,7 @@