当前位置: 首页 > news >正文

三十二、【核心功能改造】数据驱动:重构仪表盘与关键指标可视化

三十二、【核心功能改造】数据驱动:重构仪表盘与关键指标可视化

    • 前言
      • 准备工作
      • 第一部分:后端实现 - 统计 API
        • 1. 创建 `DashboardStatsView`
        • 2. 注册统计 API 路由
        • 3. 后端初步测试
      • 第二部分:前端实现 - 重构仪表盘页面
        • 1. 创建 `api/dashboard.ts` API 服务
        • 2. 重构 `HomeView.vue` (仪表盘页面)
      • 第三部分:全面测试与验证
    • 总结

前言

仪表盘是用户进入系统后最先看到的页面,它应该能直观地展示系统的核心状态和关键指标。一个设计良好的仪表盘能帮助团队快速把握项目进度、测试覆盖情况和质量趋势。

在这里插入图片描述

本文目标:

重构仪表盘页面,展示以下关键信息:

  • 概览卡片: 项目总数、功能用例总数、接口用例总数。
  • 图表统计:
    • 用例类型分布: 通过饼图展示功能用例和接口用例的占比。
    • 按项目统计接口用例数: 通过柱状图展示每个项目的接口用例数量。
    • 按用户统计用例创建数: 通过柱状图展示不同用户创建的测试用例数量,了解团队成员的贡献度。

准备工作

  1. 前端项目就绪: test-platform/frontend 项目可以正常运行 (npm run dev)。
  2. 后端 API 运行中: Django 后端服务运行。
  3. Element Plus 集成完毕。
  4. vue-echarts 图表库已安装: 在前端项目根目录运行 npm install echarts vue-echarts --save
  5. 拥有一些测试数据: 创建多个项目、不同类型的测试用例(功能/接口),并由不同用户创建,以便统计图表能展示出多样化的数据。

第一部分:后端实现 - 统计 API

新建一个 API 来提供仪表盘所需的所有统计数据,以避免前端多次请求。

1. 创建 DashboardStatsView

打开 test-platform/api/views.py,添加一个新的 APIView
在这里插入图片描述
在这里插入图片描述

# test-platform/api/views.py
from django.db.models import Count # 导入 Count
from rest_framework import viewsets, filters, generics, permissions, filters, pagination, status as http_status# ... (其他 ViewSet) ...class DashboardStatsView(APIView):"""提供仪表盘所需的统计数据GET /api/dashboard/stats/"""permission_classes = [permissions.IsAuthenticated] # 只有登录用户才能查看def get(self, request, *args, **kwargs):# 1. 概览统计project_count = Project.objects.count()# 2. 按用例类型统计case_type_stats = TestCase.objects.values('case_type').annotate(count=Count('id'))# 3. 按项目统计接口用例数 (只统计接口用例)project_case_stats = TestCase.objects.filter(case_type='api') \.values('module__project__name') \.annotate(count=Count('id')) \.order_by('-count')# 4. 按用户创建用例统计 (按 maintainer 字段)# 注意: maintainer 是 CharField,如果想按 User 对象统计,TestCase 模型需添加 creator 字段user_case_stats = TestCase.objects.exclude(maintainer__isnull=True).exclude(maintainer__exact='') \.values('maintainer') \.annotate(count=Count('id')) \.order_by('-count'

文章转载自:
http://attenuation.alwpc.cn
http://anury.alwpc.cn
http://bastion.alwpc.cn
http://blabbermouth.alwpc.cn
http://anecdotist.alwpc.cn
http://cheerly.alwpc.cn
http://bootlicker.alwpc.cn
http://bioethics.alwpc.cn
http://archonship.alwpc.cn
http://accompany.alwpc.cn
http://braw.alwpc.cn
http://analcite.alwpc.cn
http://backslide.alwpc.cn
http://anisometric.alwpc.cn
http://bidding.alwpc.cn
http://caressant.alwpc.cn
http://barodynamics.alwpc.cn
http://acetophenetidin.alwpc.cn
http://achaea.alwpc.cn
http://centrosome.alwpc.cn
http://capitate.alwpc.cn
http://ambidexterity.alwpc.cn
http://bizarrerie.alwpc.cn
http://acrobatic.alwpc.cn
http://bubble.alwpc.cn
http://autocatalytically.alwpc.cn
http://boulogne.alwpc.cn
http://adoratory.alwpc.cn
http://blendword.alwpc.cn
http://antepenultimate.alwpc.cn
http://www.dtcms.com/a/280441.html

相关文章:

  • 原型继承(prototypal inheritance)的工作原理
  • Java实现word、pdf转html保留格式
  • 19.如何将 Python 字符串转换为 Slug
  • 全面安装指南:在Linux、Windows和macOS上部署Apache Cassandra
  • 基于STM32与中航ZH-E3L字符卡通信在LED屏显示数据
  • 华为敏态开发流程敏捷开发费用估算敏态IT财务分析模板
  • 进程探秘:从 PCB 到 fork 的核心原理之旅
  • Lang3
  • Spring Ioc Bean 到底是什么
  • 朝鲜升级供应链恶意软件XORIndex,再次瞄准npm生态系统
  • 从springcloud-gateway了解同步和异步,webflux webMvc、共享变量
  • 四种高效搭建SpringBoot项目的方式详解
  • 基于UDP/IP网络游戏加速高级拥塞控制算法(示意:一)
  • SpringBoot 实现 Redis读写分离
  • 【PTA数据结构 | C语言版】根据前序序列重构二叉树
  • npm install failed如何办?
  • 【10】MFC入门到精通——MFC 创建向导对话框、属性页类、属性表类、代码
  • centos 安装java 环境
  • FreeRTOS学习笔记——总览
  • 【Docker基础】Dockerfile构建与运行流程完全指南:从原理到实践优化
  • CentOS 8-BClinux8.2更换为阿里云镜像源:保姆级教程
  • 【第二章自定义功能菜单_MenuItemAttribute_顶部菜单栏(本章进度1/7)】
  • Rust基础-part5-引用
  • 【jvm|基本原理】第四天
  • 游戏行业中的恶梦:不断升级的DDoS攻击
  • 深入理解C++11 std::iota:从原理到实践
  • UDP和TCP的主要区别是什么
  • 17. 什么是 webSocket ?
  • 力扣 hot100 Day45
  • ZYNQ千兆光通信实战:Tri Mode Ethernet MAC深度解析