智慧社区项目全维度测试报告:功能、接口、自动化与性能验证

community 智慧社区项目全维度测试报告:功能、接口、自动化与性能验证

项目地址:https://gitee.com/shiquan_zhan/shi-xun_-community

项目名称 community 智慧社区系统 版本号 V1.0
发布类型 本地测试基线发布 测试负责人 第 12 开发组
测试完成日期 2026-07-15 展示渠道 CSDN 在线展示
报告类型 项目测试报告 测试范围 用户端、管理端、AI 助手、主后端、AI 后端、中间件
测试方式 功能测试、接口测试、自动化烟测、JMeter 性能测试、安全检查、构建验证 保密说明 不记录密码、Token、API Key、邮箱授权码

文章目录

项目背景

项目背景与意义

随着社区服务数字化程度提高,居民缴费、物业报修、访客登记、车位申请、商城购物和运营管理等业务逐渐从线下人工流转转向线上系统处理。community 智慧社区系统围绕居民端、物业管理端和 AI 助手三个入口,模拟了一个社区综合服务平台。

从软件测试岗位作品集角度看,该项目不只是一个单页面演示项目,而是一个包含前端页面、后端接口、数据库、中间件、AI 独立服务和多端联动的综合系统。它适合用于展示功能测试、接口测试、自动化烟测、安全风险识别、缺陷分级和测试报告编写能力。

图 1 项目目录与系统组成截图

项目概述

本项目采用前后端分离架构,由用户端、管理端、AI 助手前端、主业务后端和 AI 助手后端组成。

子系统 技术栈 默认地址 主要职责
用户端 Vue 3、TypeScript、Vite、Element Plus、Pinia http://127.0.0.1:5173 首页、商品、购物车、订单、钱包、公告、缴费、物业、安保、车位申请
管理端 Vue 3、TypeScript、Vite、Element Plus、Pinia、ECharts http://127.0.0.1:5174 动态权限、会员、商品、促销、门店、订单、社区事项、统计、日志
主业务后端 Java 11、Spring Boot 2.3.1、MyBatis-Plus http://127.0.0.1:8099 用户端和管理端业务 API、认证授权、事务和数据访问
AI 助手前端 Vue 3、TypeScript、Vite、Element Plus http://127.0.0.1:5175 智能问答、会话历史和知识库界面
AI 助手后端 JDK 17、Spring Boot 3、Spring AI、JPA http://127.0.0.1:8100/api 模型调用、流式问答、会话和知识库管理

主业务后端与 AI 后端是两个独立 JVM 进程。AI 服务不可用时,不应影响用户端和管理端核心业务。

已实现的主要功能包括

用户端
  • 用户注册、登录、忘记密码、个人资料和修改密码。
  • 商品搜索、分类筛选、价格筛选、商品详情、门店库存和促销价格展示。
  • 商品收藏、购物车勾选、数量调整、结算和历史订单。
  • 钱包充值、转账和账单记录。
  • 通知公告、生活缴费、物业报修与投诉、安保访客。
  • 车位申请、申请进度和审批结果通知。
管理端
  • 管理员账号登录、JWT 认证、菜单权限和动态路由。
  • 运营看板、会员管理、冻结和解冻。
  • 商品分类、商品、本地图片上传、促销活动和商品绑定。
  • 区域、门店和门店商品库存管理。
  • 订单查询和状态处理。
  • 公告、生活缴费、投诉、访客、车位和车位申请审批。
  • 商品销量排行、访问排行、管理员和用户登录日志。
AI 助手
  • 普通问答和流式回答。
  • 历史会话管理。
  • 社区知识库查询与维护。
  • 独立 JDK 17 运行环境,可按需启动。

当前系统存在的不足

编号 不足项 影响
RISK-001 自动化测试覆盖不足 当前主要为构建验证、只读接口验证和烟测,写入流程自动化不足
RISK-002 前端依赖存在漏洞 npm audit 记录 90 个漏洞,其中用户端存在 3 个 critical
RISK-003 Token/session 存储在 localStorage XSS 后可能扩大影响范围
RISK-004 用户端 /goods/list 直达路由可能被代理抢占 浏览器直达商品列表可能返回后端 404
RISK-005 Swagger 默认路径 /v2/api-docs 返回 404 接口测试人员可能误判接口文档不可用
RISK-006 主后端与 AI 后端 JDK 版本不同 测试执行前必须确认 Java 环境
RISK-007 仓库存在日志和临时文件 交付或发布时需要避免误提交

项目的系统功能说明

1. 用户登录功能

用户端和管理端均提供登录入口。用户端登录用于访问个人资料、购物车、订单、钱包、车位申请等居民功能;管理端登录用于进入后台运营系统,加载动态菜单和权限路由。

测试关注点:

  • 登录页是否正常渲染。
  • 正确账号是否能进入系统。
  • 错误账号或未登录访问是否有合理提示。
  • 登录后菜单、用户状态和接口请求是否一致。

图 2 用户端登录页截图

图 3 管理端登录页截图

图 4 登录功能测试点脑图

围绕登录功能拆分功能测试、界面测试、安全测试、性能测试和兼容性测试。

2. 用户端商城与社区服务功能

用户端覆盖商城购物和社区服务两类业务。商城部分包括商品列表、商品详情、分类筛选、购物车和订单;社区服务包括公告、缴费、物业、访客和车位申请。

测试关注点:

  • 首页是否正常打开。
  • 商品分类和热销商品接口是否返回数据。
  • 商品列表、详情和门店库存是否能展示。
  • 公告、缴费、物业、访客和车位申请页面是否可进入。
  • 空数据状态是否能正常展示,不出现白屏。

图 5 用户端首页截图

图 6 商品列表或商品详情截图

图 7 社区服务页面截图

图 8 用户端业务测试点脑图

围绕用户端业务拆分商城功能、社区服务、界面测试、安全测试和兼容性测试。

3. 管理端运营功能

管理端提供后台运营能力,包括会员管理、商品管理、门店管理、订单管理、社区事项、统计图表和日志管理。

测试关注点:

  • 管理端登录后是否能进入首页。
  • 动态菜单是否按权限展示。
  • 商品、门店、订单、会员等列表是否能加载。
  • 社区审批列表是否能查看。
  • 统计图表是否能正常渲染。

图 9 管理端首页或运营看板截图

图 10 管理端业务列表截图

图 11 管理端业务测试点脑图

围绕管理端拆分功能测试、双端联动、界面测试、安全测试和性能测试。

4. AI 助手功能

AI 助手提供普通问答、快捷问题、历史会话和社区知识库查询。AI 服务与主业务服务独立部署,因此测试时需要单独验证 AI 前端和 AI 后端。

测试关注点:

  • AI 前端页面是否正常打开。
  • /api/chat/health 是否返回 status=UP
  • 快捷问题接口是否返回列表。
  • 知识库接口是否返回分页数据。
  • AI 接口异常时前端是否有明确提示。

图 12 AI 助手页面截图

测试目标

目标编号 测试目标 验收标准
OBJ-001 验证核心功能可测 用户端、管理端、AI 助手均形成测试用例
OBJ-002 验证核心接口可访问 主后端和 AI 后端只读接口返回符合预期
OBJ-003 验证运行环境完整性 MySQL、Redis、RabbitMQ、ElasticSearch 和前后端端口可检查
OBJ-004 验证页面可渲染 用户端、管理端、AI 前端首屏可打开
OBJ-005 识别安全和质量风险 富文本、依赖漏洞、Token 存储、Swagger 路径等问题有记录
OBJ-006 形成缺陷闭环 缺陷按级别统计,说明影响、状态和后续建议

测试项目相关信息

项目 内容
项目名称 community 智慧社区系统
测试版本 本地 003-community 当前仓库版本
测试日期 2026-07-15
用户端地址 http://127.0.0.1:5173
管理端地址 http://127.0.0.1:5174
AI 前端地址 http://127.0.0.1:5175
主后端地址 http://127.0.0.1:8099
AI 后端地址 http://127.0.0.1:8100/api
测试脚本 scripts/qa/runtime-smoke.ps1
测试文档 docs/testing/01-test-plan.mddocs/testing/06-quality-assessment-guide.md

测试安排

模块 子模块 前端负责人 后端负责人 提测内容 测试方式 当前进度 备注
用户端 登录、首页、商品、购物车、订单 第 12 开发组 第 12 开发组 居民端核心页面和接口 功能测试、接口测试、页面烟测 已完成基线记录 写入流程建议使用测试库补测
用户端 公告、缴费、物业、访客、车位 第 12 开发组 第 12 开发组 社区服务入口和状态展示 功能测试、页面烟测 已完成用例设计 车位审批需双端联动验证
管理端 登录、动态菜单、会员、商品、订单 第 12 开发组 第 12 开发组 后台运营管理 功能测试、页面烟测 已完成用例设计 关注权限菜单和列表加载
管理端 社区事项、统计、日志 第 12 开发组 第 12 开发组 后台社区管理和统计 功能测试、页面烟测 已完成用例设计 关注图表和数据状态
AI 助手 问答、快捷问题、知识库 第 12 开发组 第 12 开发组 AI 基础服务 接口测试、页面烟测 已完成基线记录 AI 后端需 JDK 17
环境 MySQL、Redis、RabbitMQ、ES 第 12 开发组 第 12 开发组 本地依赖服务 端口检查、只读探测 已完成基线记录 不记录任何密码
安全 富文本、依赖、Token、Swagger 第 12 开发组 第 12 开发组 安全风险识别 静态扫描、依赖审计 已完成缺陷记录 依赖漏洞后续迭代

图 13 本地服务启动截图

测试分类

(1) 功能测试

功能测试用例统计
模块 用例数 优先级分布
环境与构建 8 P0: 5,P1: 3
用户端商城 10 P0: 2,P1: 6,P2: 2
用户端社区服务 8 P1: 6,P2: 2
管理端运营 9 P0: 2,P1: 6,P2: 1
AI 助手 6 P1: 4,P2: 2
接口与安全 9 P0: 2,P1: 5,P2: 2
合计 50 P0: 11,P1: 30,P2: 9
用户端功能测试结果
用例编号 优先级 测试场景 预期结果 当前记录
USER-GOODS-001 P0 首页渲染 页面非空,无错误覆盖层 已纳入前端烟测
USER-GOODS-002 P1 商品分类接口 返回分类树 接口验证通过
USER-GOODS-003 P1 热销商品接口 返回商品列表 接口验证通过
USER-GOODS-004 P1 商品搜索 商品列表刷新 已设计用例
USER-GOODS-008 P0 加入购物车 登录后购物车数量更新 建议后续使用测试库执行
USER-COM-001 P1 公告列表 展示公告列表 已设计用例
USER-COM-003 P1 公告富文本安全 脚本被清洗 高风险入口已记录并修复
USER-COM-007 P1 车位申请入口 页面可进入 已设计用例
管理端功能测试结果
用例编号 优先级 测试场景 预期结果 当前记录
ADMIN-001 P0 登录页渲染 显示登录表单 已纳入前端烟测
ADMIN-002 P0 管理员登录 成功进入首页 已设计用例
ADMIN-003 P1 动态菜单 菜单按权限展示 已设计用例
ADMIN-005 P1 商品列表 列表可加载 已设计用例
ADMIN-007 P1 订单列表 列表可加载 已设计用例
ADMIN-008 P1 社区审批 车位申请审批列表可加载 已设计用例

功能测试结果说明:当前项目已形成页面级、接口级和性能级测试点设计,用户端、管理端、AI 助手和后端接口均已纳入测试范围。为了让报告接近原文的颗粒度,测试用例不只按模块统计,而是继续按"页面入口、登录状态、输入组合、异常分支、权限边界、性能和兼容性"展开。部分会写入数据库的业务,例如加入购物车、下单、车位申请和后台审批,建议后续放到专用测试库中执行,避免污染演示数据。

(2) 自动化测试

编写 Web 测试用例

本项目自动化测试分为三层:

  • Selenium-Java UI/Web 自动化:覆盖用户端、管理端、AI 助手的页面加载、导航、登录、业务列表和基础安全检查。
  • Python 接口自动化:覆盖主后端接口、AI 后端接口、Swagger、前端入口、环境端口和安全检查。
  • PowerShell 运行烟测:快速判断本地环境是否测到正确项目、核心服务是否启动、前端页面是否能访问。

自动化 Web 测试用例设计如下。原文之所以测试用例数量多,是因为它不是只写"测试登录页""测试列表页"这种模块级条目,而是继续向下拆到页面状态、输入组合、异常分支、权限边界、性能和兼容性。本报告按同样颗粒度展开:一个登录页面会拆出正确账号、错误密码、空验证码、验证码过期、Token 伪造、SQL 注入、弱网响应等多条测试点;商城、社区服务、管理后台和 AI 助手也按同样方式展开。

图 14-1-1 登录页面详细测试用例思维导图

图 14-1-2 用户端商城与社区服务详细测试用例思维导图

图 14-1-3 管理后台详细测试用例思维导图

图 14-1-4 接口、AI 助手与性能测试用例思维导图

编号 覆盖项 检查方式 预期结果
WEB-001 用户端首页 访问 5173 页面非空,无错误覆盖层
WEB-002 管理端登录页 访问 5174 显示登录表单
WEB-003 AI 前端首页 访问 5175 页面非空
WEB-004 主后端接口 请求商品分类、热销商品、验证码接口 返回 200 或符合预期的数据
WEB-005 AI 后端接口 请求健康检查、快捷问题、知识库接口 返回 200 或符合预期的数据
WEB-006 Swagger 文档 请求 Swagger 资源和分组 JSON 分组路径可用
WEB-007 中间件端口 检查 MySQL、Redis、RabbitMQ、ES 端口监听或只读探测成功
Selenium-Java UI 自动化测试代码

Selenium 测试工程位于:

text 复制代码
scripts/qa/selenium-java

目录结构:

text 复制代码
selenium-java/
├─ pom.xml
├─ src/test/java/com/community/qa/config/TestConfig.java
├─ src/test/java/com/community/qa/pages/BasePage.java
└─ src/test/java/com/community/qa/tests/
   ├─ UserPortalUiTest.java
   ├─ AdminPortalUiTest.java
   └─ AiAssistantUiTest.java

运行命令:

powershell 复制代码
cd scripts\qa\selenium-java
mvn test

管理端登录测试代码片段如下,演示管理员账号使用 admin / admin123

java 复制代码
private void loginAdmin() {
  open(TestConfig.url(TestConfig.ADMIN_URL, "/login"));
  type(By.cssSelector("input[placeholder='请输入管理员账号']"), TestConfig.ADMIN_NAME);
  type(By.cssSelector("input[placeholder='请输入登录密码']"), TestConfig.ADMIN_PASSWORD);
  click(By.cssSelector(".login-submit"));
  wait.until(webDriver -> !webDriver.getCurrentUrl().contains("/login")
      || pageContains("当前管理员")
      || pageContains("工作台"));
}

管理端核心业务列表测试代码片段:

java 复制代码
@Test
@DisplayName("ADMIN-004/005/006/007/008 管理端核心业务列表可访问")
void adminBusinessListRoutesShouldRender() {
  loginAdmin();
  String[] paths = {
      "/member/index",
      "/goods/index",
      "/store/info",
      "/order/index",
      "/community/parking/application/index"
  };
  for (String path : paths) {
    open(TestConfig.url(TestConfig.ADMIN_URL, path));
    assertTrue(driver.getPageSource().contains("查询")
        || driver.getPageSource().contains("申请")
        || driver.getPageSource().contains("商品"));
  }
}

用户端社区服务测试代码片段:

java 复制代码
@Test
@DisplayName("USER-COM-004/005/006/007 社区服务入口可访问")
void communityServiceRoutesShouldRender() {
  String[] paths = {
      "/community/charge",
      "/community/property",
      "/community/visitor",
      "/community/parking"
  };
  for (String path : paths) {
    open(TestConfig.url(TestConfig.USER_URL, path));
    assertTrue(driver.getPageSource().length() > 200);
  }
}
java 复制代码
@Test
@DisplayName("USER-GOODS-001 用户端首页渲染")
void userHomeShouldRender() {
  open(TestConfig.USER_URL);
  assertTrue(pageContains("智慧社区") || pageContains("商品选购") || pageContains("生活缴费"));
  saveScreenshot("USER-GOODS-001-user-home");
}

@Test
@DisplayName("USER-GOODS-004/005/006 商品列表支持搜索、分类和价格筛选入口")
void goodsListShouldExposeSearchAndFilters() {
  open(TestConfig.url(TestConfig.USER_URL, "/goods/list"));
  assertTrue(pageContains("商品") || pageContains("分类") || pageContains("价格") || pageContains("搜索"));
  saveScreenshot("USER-GOODS-004-goods-list");
}

@Test
@Disabled("购物车写入和下单会产生业务数据,需测试库或演示账号隔离后开启")
@DisplayName("USER-GOODS-WRITE 购物车写入和下单流程预留")
void cartAndOrderWriteFlowReserved() {
  open(TestConfig.url(TestConfig.USER_URL, "/carts/index"));
}

Selenium-Java 执行结果截图

本次 Selenium-Java 执行结果为失败,失败原因包括管理端登录后等待超时、AI 前端在 127.0.0.1:5175 下连接被拒绝。报告将该结果作为真实测试证据和缺陷线索记录,不伪造通过。target/screenshots 中已生成部分通过用例的页面截图。

无法安全自动执行的写入型 UI 用例已在 Selenium-Java 中预留 @Disabled 方法,例如购物车写入、下单和社区审批。跳过原因统一标注为"需测试库或可回滚演示数据后开启",避免在正式库中制造订单、购物车或审批状态数据。

tests 测试用例编写思维导图

Python 接口自动化测试代码

接口自动化代码位于:

text 复制代码
scripts/qa/api-automation/test_api.py

运行命令:

powershell 复制代码
cd scripts\qa\api-automation
python -m pip install -r requirements.txt
python -m pytest

主后端公共接口测试代码片段:

python 复制代码
def test_USER_GOODS_002_category_tree():
    status, payload = request("/goods/category/tree")
    assert status == 200
    assert len(payload) > 20


def test_USER_GOODS_003_hot_top_10():
    status, payload = request("/goods/special/hotTop10")
    assert status == 200
    assert len(payload) > 20

管理端登录和业务接口测试代码片段:

python 复制代码
@pytest.fixture(scope="session")
def admin_token():
    _, payload = request(
        "/admin/auth/login",
        method="POST",
        body={"adminName": ADMIN_NAME, "adminPassword": ADMIN_PASSWORD},
    )
    data = json.loads(payload)
    body = data.get("body", data)
    token = body.get("accessToken")
    if not token:
        pytest.skip("管理员登录响应中未取得 accessToken")
    return token


def test_ADMIN_004_to_009_admin_business_apis(path, admin_token):
    post_admin_list(path, admin_token)


@pytest.mark.skip(reason="审批操作会修改车位申请状态,需测试库或可回滚演示数据后开启")
def test_ADMIN_WRITE_parking_approval_flow_reserved(admin_token):
    request(
        "/admin/community/parking/application/audit",
        method="POST",
        body={"id": 1, "status": 1},
        headers=admin_headers(admin_token),
    )

安全测试代码片段:

python 复制代码
def test_SEC_003_swagger_group_json():
    status, payload = request("/v2/api-docs?group=communityApi")
    assert status == 200
    assert "swagger" in payload


def test_SEC_005_xss_payload_not_present_in_frontend_shells():
    for url in (USER_FRONTEND, ADMIN_FRONTEND, AI_FRONTEND):
        _, payload = request(url, headers={"Accept": "text/html"}, expected=(200,))
        assert "<script>alert" not in payload.lower()
python 复制代码
def test_USER_GOODS_001_user_home_http_ok():
    status, payload = request(USER_FRONTEND, headers={"Accept": "text/html"}, expected=(200,))
    assert status == 200
    assert len(payload) > 100

@pytest.mark.parametrize("path", ["goods/list", "carts/index"])
def test_USER_GOODS_004_to_008_user_goods_routes(path):
    status, payload = request(
        urljoin(USER_FRONTEND + "/", path),
        headers={"Accept": "text/html"},
        expected=(200,),
    )
    assert status == 200
    assert len(payload) > 100

@pytest.mark.skip(reason="购物车写入和下单会产生业务数据,需测试库或演示账号隔离后开启")
def test_USER_GOODS_WRITE_cart_and_order_flow_reserved():
    request("/cart/add", method="POST", body={"goodsId": 1, "quantity": 1})

def test_SEC_004_default_swagger_path_available():
    status, payload = request("/v2/api-docs", expected=(200,))
    assert status == 200
    assert "swagger" in payload

Python 接口自动化执行结果截图

本次 pytest 执行结果为 45 passed / 2 skipped。已覆盖用户端 /goods/list 直达、Swagger 默认路径、主后端公共接口、AI 后端接口和三端前端入口;写入型业务用例保留跳过原因,需测试库或可回滚演示账号后开启。

无法安全自动执行的写入型接口用例在 test_api.py 中使用 @pytest.mark.skip 预留,包括购物车写入、下单和审批操作;待测试库、演示账号和可回滚数据准备完成后再移除跳过标记执行。

创建自动化烟测脚本

脚本位置:

text 复制代码
scripts/qa/runtime-smoke.ps1

执行命令:

powershell 复制代码
powershell -ExecutionPolicy Bypass -File scripts\qa\runtime-smoke.ps1

如默认前端端口被占用,可指定备用端口:

powershell 复制代码
powershell -ExecutionPolicy Bypass -File scripts\qa\runtime-smoke.ps1 `
  -UserFrontendUrl http://127.0.0.1:6173 `
  -AdminFrontendUrl http://127.0.0.1:6174 `
  -AiFrontendUrl http://127.0.0.1:6175

自动化测试目录结构图

自动化测试工具准备
工具 用途
PowerShell 执行本地烟测脚本
curl / Invoke-WebRequest 验证 HTTP 接口
浏览器 检查前端页面渲染
npm audit 检查前端依赖漏洞
Maven / npm 构建验证
测试用例执行结果
编号 覆盖项 检查方式
SMOKE-001 中间件端口 检查 3306/6379/5672/15672/9200
SMOKE-002 后端端口 检查 8099/8100
SMOKE-003 前端端口 检查 5173/5174/5175 或备用端口
SMOKE-004 Redis redis-cli ping,不可用时退化为端口检查
SMOKE-005 ElasticSearch GET http://127.0.0.1:9200
SMOKE-006 主后端接口 商品分类、热销商品、验证码
SMOKE-007 AI 接口 健康检查、快捷问题、知识库
SMOKE-008 Swagger /swagger-resources 和分组 JSON

自动化烟测执行结果截图

(3) 性能测试

性能测试工具采用 Apache JMeter 5.5,测试计划位于:

text 复制代码
scripts/qa/jmeter/community-performance-test-plan.jmx

执行命令:

powershell 复制代码
cd scripts\qa\jmeter
$env:COMMUNITY_ADMIN_PASSWORD="<演示账号密码>"
powershell -ExecutionPolicy Bypass -File .\run-jmeter.ps1
JMeter 测试设计
配置项 本轮设置 说明
线程数 10 模拟 10 个并发用户
Ramp-Up 10 秒 线程逐步启动,避免瞬时冲击过大
循环次数 5 每个线程执行 5 轮请求
请求总数 350 7 个接口 × 10 线程 × 5 轮
执行方式 非 GUI 模式 生成 JTL 和 HTML 报告
JMeter 压测接口
ID 接口 类型 说明
PERF-API-001 /swagger-resources 主后端 Swagger 分组接口
PERF-API-002 /goods/category/tree 主后端 商品分类树
PERF-API-003 /goods/special/hotTop10 主后端 热销商品 Top10
PERF-API-004 /admin/auth/login 主后端 管理员登录接口
PERF-AI-001 /api/chat/health AI 后端 AI 健康检查
PERF-AI-002 /api/chat/quick-questions AI 后端 快捷问题列表
PERF-AI-003 /api/community/knowledge AI 后端 知识库列表

购物车写入、下单、审批等会修改业务数据的接口不纳入默认压测计划,需测试库或可回滚演示账号后开启。

本轮 JMeter 执行结果
指标 结果 说明
总请求数 350 JMeter 已实际执行
成功数 350 本轮请求均成功
失败数 0 无失败请求
错误率 0% 本轮压测通过
平均响应时间 12.64 ms JMeter Total 统计值
最大耗时 138 ms JMeter Total 统计值
吞吐量 37.61/s JMeter Total 统计值
输出目录 scripts/qa/jmeter/results/20260716-234121/ 包含 JTL 与 HTML 报告

本轮执行前已确认主业务后端 127.0.0.1:8099 和 AI 后端 127.0.0.1:8100 可访问。JMeter 汇总结果为 350 个请求、0 个错误、错误率 0%,说明在 10 线程、10 秒启动、循环 5 次的基础并发场景下,核心只读接口和管理员登录接口能够正常响应。

JMeter HTML 报告首页截图

JMeter 响应时间截图

图 21-3 JMeter 吞吐量截图

图 21-4 JMeter 活动线程数变化图

图 21-5 JMeter 聚合报告图

图 21-6 JMeter 响应时间与吞吐量对比图

(4) 接口测试

接口测试采用只读请求,不主动执行下单、支付、审批等写入型业务。

接口测试结果汇总
类别 用例数 通过 失败 备注
主后端公共接口 3 3 0 商品分类、热销商品、验证码
主后端文档接口 3 3 0 /v2/api-docs 与分组路径均可用
AI 后端接口 4 3 1 /api/ 返回 500,具体业务健康接口可用
合计 10 8 2 失败项均已记录为文档或路由差异
主业务后端接口
ID 接口 方法 预期 实际
API-MAIN-001 /goods/category/tree GET 200,返回分类树 通过
API-MAIN-002 /goods/special/hotTop10 GET 200,返回商品列表 通过
API-MAIN-003 /user/captcha/image GET 200,返回图片验证码 通过
API-MAIN-004 /swagger-ui.html GET 200,返回 Swagger UI 通过
API-MAIN-005 /swagger-resources GET 200,返回 communityApi 分组 通过
API-MAIN-006 /v2/api-docs GET 文档 JSON 200,返回 Swagger JSON
API-MAIN-007 /v2/api-docs?group=communityApi GET Swagger JSON 通过
AI 后端接口
ID 接口 方法 预期 实际
API-AI-001 /api/chat/health GET 200,status=UP 通过
API-AI-002 /api/chat/quick-questions GET 200,返回快捷问题 通过
API-AI-003 /api/community/knowledge GET 200,返回知识库分页数据 通过
API-AI-004 /api/ GET 健康页或明确 404 500,记录为路由兜底问题

图 22 Swagger UI 截图

图 23 接口请求结果截图

(5) 安全测试

安全项 测试方式 当前结论 风险级别
富文本 XSS 扫描 v-html、Markdown 渲染、公告和商品详情入口 高风险入口已记录,本轮已修复核心清洗策略 P1
前端依赖漏洞 npm audit 共发现 90 个漏洞,用户端存在 3 个 critical P1
Token 存储 扫描 localStorage 使用 XSS 后可能扩大影响面 P1
Swagger 路径 请求 Swagger UI 与 JSON 分组路径可用,默认 JSON 路径 404 P2
日志提交风险 扫描 .log/.err/.gz 根目录和后端存在日志与临时输出文件 P3
后端依赖 检查 systemPathfastjsonjjwtspringfox 存在可维护性和安全性风险 P2

图 24 npm audit 结果截图

图 25 富文本安全修复或风险点截图

(6) 构建与环境测试

构建验证命令
子系统 构建命令
主业务后端 cd backend\community-api && mvn clean package -DskipTests
管理端 cd frontend\admin && npm run build
用户端 cd frontend\user && npm run build
AI 后端 cd backend\community-ai-assistant && mvn clean package -DskipTests
AI 助手前端 cd frontend\ai-assistant && npm run build
环境验证点
环境项 端口或命令 预期
MySQL 3306 端口监听,数据库可供主业务使用
Redis redis-cli ping 返回 PONG
RabbitMQ 5672 端口监听
RabbitMQ 管理端 15672 HTTP 200 或登录页
ElasticSearch http://127.0.0.1:9200 返回集群版本
主业务后端 8099 Spring Boot 服务可访问
AI 后端 8100 AI 业务接口可访问
用户端 5173 页面非空
管理端 5174 登录页可访问
AI 前端 5175 页面非空

图 26 Maven 构建成功截图

图 27 前端构建成功截图

(7) 缺陷统计与分析

缺陷统计
严重级别 数量 状态
P0 0 未发现阻塞级缺陷
P1 6 3 个本轮修复,3 个建议后续迭代
P2 5 2 个本轮修复,3 个建议后续迭代
P3 2 记录为低优先级优化
缺陷明细
ID 级别 模块 问题 影响 状态
BUG-001 P1 用户端 / AI 前端 多处 v-html 直接或间接渲染接口内容 可能产生 XSS,结合 localStorage token 风险更高 本轮修复
BUG-002 P1 前端依赖 npm audit 共发现 90 个漏洞,用户端 3 个 critical 存在供应链安全风险 后续迭代
BUG-003 P1 认证设计 用户端、管理端、AI 前端均有 localStorage token/session 存储 XSS 后可能扩大影响面 后续迭代
BUG-004 P1 AI 后端 启动日志出现 MySQL Public Key Retrieval is not allowed 环境兼容性不稳定 后续迭代
BUG-005 P1 运行环境 默认 5173/5174/5175 端口可能被其他项目占用 容易误测其他应用 本轮通过烟测脚本缓解
BUG-006 P2 文档 项目文档引用与实际目录存在偏差 新成员无法按规范查找文档 已补测试文档,其余后续补齐
BUG-007 P2 后端构建 主后端声明 Java 11,但 Maven 绑定 JDK 17 时仍可构建 运行环境与文档不一致 后续迭代
BUG-008 P2 Swagger /v2/api-docs 默认路径缺少可用文档 JSON 接口测试人员容易误判 Swagger 不可用 本轮修复并回归通过
BUG-009 P2 管理端上传组件 图片覆盖层使用 div @click 作为操作控件 键盘可访问性与语义不足 本轮修复
BUG-010 P2 后端依赖 systemPath 本地 jar、fastjson 1.2.75jjwt 0.9.1springfox 2.9.2 可维护性和安全性风险 后续迭代
BUG-011 P3 仓库卫生 根目录和后端存在日志、临时输出文件 容易误提交 后续清理
BUG-012 P3 AI 前端构建 Sass legacy JS API 警告 后续升级 Sass/Vite 时可能受影响 后续清理
BUG-013 P1 用户端路由 Vite /goods 静态资源代理抢占 /goods/list 前端路由 浏览器直达商品列表返回后端 404 本轮修复并回归通过

图 28 缺陷报告截图

典型缺陷分析
  1. Swagger 默认路径 404

    已为 Swagger 补充默认 Docket,直接请求 /v2/api-docs 与分组路径 /v2/api-docs?group=communityApi 均可返回文档 JSON。

  2. 用户端商品列表直达路由 404

    用户端 /goods/list 前端路由已为 Vite /goods 代理增加 HTML 请求绕过,浏览器直达时返回用户端前端页面。

  3. 富文本 XSS 风险

    商品详情、公告详情和 AI Markdown 都可能渲染接口返回内容。若不清洗,脚本片段可能在页面执行。该风险已记录为 P1,并推动清洗策略修复。

总结测试 tips

  • 先确认端口归属,再开始页面测试,避免误测其他项目。
  • 前后端分离项目不能只看页面打开,还要核对请求路径、状态码、响应结构和数据库状态。
  • 写入型流程如购物车、订单、车位申请、审批,建议使用专用测试库执行。
  • Swagger 文档要确认分组路径,不能只请求默认 /v2/api-docs 后就判断不可用。
  • 构建成功只代表代码可编译,不代表 MySQL、Redis、RabbitMQ、ElasticSearch、SMTP 或模型服务全部可用。
  • 富文本、Markdown、公告详情、商品详情等内容展示入口必须纳入 XSS 测试。
  • 测试报告中不得写入数据库密码、邮箱授权码、Token、API Key 或个人隐私信息。
  • 缺陷报告要写清楚影响、优先级、状态和后续建议。

感谢阅读,记得点赞、关注、收藏,欢迎各位评论区交流!!!

相关推荐
Brilliantwxx5 小时前
【Linux】基础指令
linux·运维·服务器
ZhemgLee5 小时前
在Linux上使用Claude Code 并使用本地VS Code SSH远程访问的完整指南
linux·运维·服务器·ssh
Yiiz.8 小时前
虚拟机网络设置
运维
乐维_lwops15 小时前
2026年如何实现多分支机构全网设备统一运维监控一
运维·cmdb·运维监控·网管·agent ops
视觉AI16 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
银河麒麟操作系统16 小时前
闸机高效稳跑,通勤提速升级!银河麒麟赋能北京轨交新基建
运维·服务器·安全·交通物流
六点_dn16 小时前
Linux学习笔记-printf命令
linux·运维·算法
蜡台16 小时前
Linux Python 安装使用
linux·运维·服务器
147API16 小时前
OpenAI新增工作区Admin keys,管理自动化怎么拆权限
运维·人工智能·自动化·openai·api