You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 KiB
32 KiB
测试指南
**本文引用的文件** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [AuthLoginUser.java](file://crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [AuthUserServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java) - [SysDeptServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java) - [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) - [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) - [DataScopeIntegrationTest.java](file://crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java) - [TestOwnedData.java](file://crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java) - [TestOwnedDataMapper.java](file://crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java) - [DingTalkAuthClientTest.java](file://crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java) - [ThirdPartyAuthClientFactoryTest.java](file://crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java) - [AuthServiceImplTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java) - [AuthUserServiceImplTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java) - [SysDeptServiceImplTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java) - [UserListIntegrationTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java) - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [BusinessErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java) - [MissingParameterException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java) - [PermissionErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java) - [ResourceNotExistException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java) - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) - [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) - [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) - [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) - [SecurityUtils.java](file://crm-base/src/main/java/com/crm/base/security/SecurityUtils.java) - [DataVisibilityTest.java](file://crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java) - [FileController.java](file://crm-file/src/main/java/com/crm/file/controller/FileController.java) - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) - [FileInfoServiceImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java) - [KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) - [OrphanChunkCleanupTask.java](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java) - [FileApiImplTest.java](file://crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java) - [KkFileViewClientTest.java](file://crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java) - [OrphanChunkCleanupTaskTest.java](file://crm-file/src/test/java/com/crm/file/task/OrphanChunkCleanupTaskTest.java)更新摘要
变更内容
- 新增用户列表集成测试章节,详细介绍UserListIntegrationTest的使用方法和最佳实践
- 扩展数据权限集成测试部分,补充DataScopeIntegrationTest的测试场景和断言方法
- 更新集成测试策略,增加复杂业务场景的测试覆盖建议
目录
简介
本测试指南面向CRM后端项目的开发者与测试工程师,目标是建立覆盖单元测试、集成测试、端到端测试的完整体系。文档围绕认证授权、权限控制、文件操作、异常处理等核心能力,给出Mock策略、测试数据准备、测试环境搭建、覆盖率要求与持续集成建议,并补充性能、压力与安全测试的方法与工具推荐,帮助团队构建稳定可靠的测试质量保障流程。
项目结构
本项目采用多模块Maven工程:
- crm-app:应用启动入口与全局配置
- crm-auth:认证与权限(控制器、安全配置、服务实现、客户端)
- crm-base:基础能力(异常、结果封装、通用实体、安全上下文、MyBatis-Plus配置等)
- crm-file:文件上传下载与预览、分片清理任务
graph TB
subgraph "应用层"
APP["crm-app<br/>启动类与应用配置"]
end
subgraph "认证与权限"
AUTH_CTRL["AuthController / SystemController"]
AUTH_SEC["SecurityConfig / JwtAuthenticationFilter / TokenService"]
AUTH_SVC["AuthServiceImpl / AuthUserServiceImpl / SysDeptServiceImpl"]
AUTH_CLIENT["DingTalkAuthClient / ThirdPartyAuthClientFactory"]
end
subgraph "基础能力"
BASE_EXC["GlobalExceptionHandlerAdvice / 业务异常类"]
BASE_RESULT["Result / ResultCodeEnum / PageResult"]
BASE_SEC["DataScopeHelper / DataVisibilityContext / SecurityUtils"]
BASE_ENT["BaseEntity / OwnedEntity"]
end
subgraph "文件服务"
FILE_CTRL["FileController"]
FILE_SVC["FileApiImpl / FileInfoServiceImpl"]
FILE_TASK["OrphanChunkCleanupTask"]
FILE_EXT["KkFileViewClient"]
end
APP --> AUTH_CTRL
AUTH_CTRL --> AUTH_SEC
AUTH_CTRL --> AUTH_SVC
AUTH_SVC --> BASE_ENT
AUTH_SEC --> BASE_SEC
AUTH_SVC --> BASE_EXC
AUTH_SVC --> BASE_RESULT
FILE_CTRL --> FILE_SVC
FILE_SVC --> FILE_EXT
FILE_SVC --> BASE_RESULT
FILE_TASK --> FILE_SVC
图表来源
- CrmAppApplication.java
- AuthController.java
- SystemController.java
- SecurityConfig.java
- JwtAuthenticationFilter.java
- TokenService.java
- AuthServiceImpl.java
- AuthUserServiceImpl.java
- SysDeptServiceImpl.java
- DingTalkAuthClient.java
- ThirdPartyAuthClientFactory.java
- GlobalExceptionHandlerAdvice.java
- BusinessErrorException.java
- PermissionErrorException.java
- Result.java
- ResultCodeEnum.java
- PageResult.java
- BaseEntity.java
- OwnedEntity.java
- DataScopeHelper.java
- DataVisibilityContext.java
- SecurityUtils.java
- FileController.java
- FileApiImpl.java
- FileInfoServiceImpl.java
- KkFileViewClient.java
- OrphanChunkCleanupTask.java
章节来源
- CrmAppApplication.java
- application.yml
核心组件
- 认证与鉴权
- 控制器:登录、系统信息接口
- 安全配置:JWT过滤器、令牌服务、权限拦截器
- 服务层:用户认证、部门树、角色菜单权限
- 第三方登录:钉钉等OAuth客户端与工厂
- 基础能力
- 统一异常处理与业务异常类型
- 统一返回体与分页对象
- 数据权限上下文与工具方法
- 通用实体基类
- 文件服务
- 文件上传/下载/预览
- 分片清理定时任务
- 外部预览服务客户端
章节来源
- AuthController.java
- SystemController.java
- SecurityConfig.java
- JwtAuthenticationFilter.java
- TokenService.java
- AuthServiceImpl.java
- AuthUserServiceImpl.java
- SysDeptServiceImpl.java
- DingTalkAuthClient.java
- ThirdPartyAuthClientFactory.java
- GlobalExceptionHandlerAdvice.java
- BusinessErrorException.java
- PermissionErrorException.java
- Result.java
- ResultCodeEnum.java
- PageResult.java
- BaseEntity.java
- OwnedEntity.java
- DataScopeHelper.java
- DataVisibilityContext.java
- SecurityUtils.java
- FileController.java
- FileApiImpl.java
- FileInfoServiceImpl.java
- KkFileViewClient.java
- OrphanChunkCleanupTask.java
架构总览
下图展示请求从Web层到安全层、服务层与外部依赖的关键路径,以及异常与返回体的流转。
sequenceDiagram
participant Client as "客户端"
participant Controller as "AuthController/SystemController"
participant Filter as "JwtAuthenticationFilter"
participant TokenSvc as "TokenService"
participant Service as "AuthServiceImpl/AuthUserServiceImpl"
participant BaseEx as "GlobalExceptionHandlerAdvice"
participant Resp as "Result/PageResult"
Client->>Controller : "HTTP请求(含Token)"
Controller->>Filter : "进入安全过滤链"
Filter->>TokenSvc : "解析/校验Token"
TokenSvc-->>Filter : "用户上下文"
Filter-->>Controller : "放行或拒绝"
Controller->>Service : "调用业务逻辑"
Service-->>Controller : "返回业务结果"
Controller-->>Resp : "封装为统一响应"
Note over Controller,Resp : "正常路径"
Service-->>BaseEx : "抛出业务异常"
BaseEx-->>Resp : "统一错误响应"
Resp-->>Client : "HTTP响应"
图表来源
- AuthController.java
- SystemController.java
- JwtAuthenticationFilter.java
- TokenService.java
- AuthServiceImpl.java
- AuthUserServiceImpl.java
- GlobalExceptionHandlerAdvice.java
- Result.java
- PageResult.java
详细组件分析
认证与权限测试要点
- 单元测试
- 对TokenService进行Mock,验证Token生成、解析、过期判断分支
- 对AuthServiceImpl进行Mock,覆盖登录成功/失败、密码校验、第三方登录回调
- 对DingTalkAuthClient与ThirdPartyAuthClientFactory进行Mock,模拟第三方响应与异常
- 集成测试
- 使用SpringBootTest加载安全配置,构造JWT并发起请求,验证鉴权通过与否
- 使用@Sql或内存数据库初始化用户、角色、菜单数据,验证权限判定与数据范围
- 端到端测试
- 使用RestTemplate或WebTestClient发起登录、获取用户信息、受限资源访问等场景
- 断言HTTP状态码、统一响应结构与字段
classDiagram
class AuthController {
+登录()
+获取用户信息()
}
class JwtAuthenticationFilter {
+doFilter()
}
class TokenService {
+生成Token()
+解析Token()
+校验Token()
}
class AuthServiceImpl {
+登录()
+查询用户()
}
class DingTalkAuthClient {
+获取用户信息()
}
class ThirdPartyAuthClientFactory {
+创建客户端()
}
AuthController --> JwtAuthenticationFilter : "受保护"
JwtAuthenticationFilter --> TokenService : "解析/校验"
AuthController --> AuthServiceImpl : "调用"
AuthServiceImpl --> DingTalkAuthClient : "第三方登录"
AuthServiceImpl --> ThirdPartyAuthClientFactory : "选择客户端"
图表来源
- AuthController.java
- JwtAuthenticationFilter.java
- TokenService.java
- AuthServiceImpl.java
- DingTalkAuthClient.java
- ThirdPartyAuthClientFactory.java
章节来源
- AuthServiceImplTest.java
- AuthUserServiceImplTest.java
- DingTalkAuthClientTest.java
- ThirdPartyAuthClientFactoryTest.java
用户列表集成测试要点
新增 针对用户列表功能的全面集成测试,确保复杂查询场景的正确性
- 测试场景覆盖
- 用户列表分页查询:验证分页参数、排序规则、数据完整性
- 条件筛选测试:用户名、邮箱、状态等多条件组合查询
- 权限控制测试:不同角色用户的可见范围和数据隔离
- 性能测试:大数据量下的查询性能和响应时间
- 测试数据准备
- 使用@Sql脚本批量插入测试用户数据
- 模拟不同部门和角色的用户关系
- 准备边界条件和异常场景数据
- 断言策略
- 验证返回数据的结构和字段完整性
- 检查分页信息的准确性(总数、页码、每页大小)
- 确认权限控制生效,用户只能看到授权范围内的数据
flowchart TD
Start(["用户列表查询请求"]) --> ParseParams["解析查询参数"]
ParseParams --> ValidatePerm["验证用户权限"]
ValidatePerm --> BuildQuery["构建查询条件"]
BuildQuery --> ExecuteQuery["执行数据库查询"]
ExecuteQuery --> ApplyPagination["应用分页处理"]
ApplyPagination --> FormatResponse["格式化响应数据"]
FormatResponse --> Return["返回结果"]
图表来源
- UserListIntegrationTest.java
- AuthUserServiceImpl.java
- DataScopeHelper.java
章节来源
- UserListIntegrationTest.java
数据权限与可见性测试要点
- 单元测试
- 对DataScopeHelper与DataVisibilityContext进行Mock,验证不同数据范围下的SQL拼接与上下文切换
- 对OwnedEntity与BaseEntity进行Mock,验证数据归属字段填充
- 集成测试
- 使用@DataScope注解与拦截器,构造不同用户与部门关系,验证查询结果集隔离
- 使用DataScopeIntegrationTest作为参考,结合测试实体与Mapper验证数据范围生效
- 扩展测试场景:新增复杂的数据权限组合测试,包括多层级部门、跨部门数据共享等场景
- 端到端测试
- 以不同身份登录,访问同一接口,断言返回数据仅包含当前用户可访问范围
flowchart TD
Start(["进入受保护接口"]) --> CheckScope["读取数据权限上下文"]
CheckScope --> ScopeType{"数据范围类型"}
ScopeType --> |个人| BuildPersonal["拼接个人数据条件"]
ScopeType --> |部门| BuildDept["拼接部门数据条件"]
ScopeType --> |全部| NoFilter["不添加过滤条件"]
BuildPersonal --> Apply["应用到查询语句"]
BuildDept --> Apply
NoFilter --> Apply
Apply --> Execute["执行查询并返回结果"]
Execute --> End(["结束"])
图表来源
- DataScopeInterceptor.java
- DataScopeTables.java
- DataScopeHelper.java
- DataVisibilityContext.java
- DataScope.java
- DataScopeIntegrationTest.java
- TestOwnedData.java
- TestOwnedDataMapper.java
章节来源
- DataScopeIntegrationTest.java
- DataVisibilityTest.java
文件服务测试要点
- 单元测试
- 对FileApiImpl与FileInfoServiceImpl进行Mock,验证上传会话创建、分片合并、元数据持久化
- 对KkFileViewClient进行Mock,模拟预览服务响应与超时/错误
- 对OrphanChunkCleanupTask进行Mock,验证分片清理逻辑与调度触发
- 集成测试
- 使用内存文件系统或Minio测试容器,验证真实上传下载流程
- 使用@Sql初始化文件记录,断言查询与删除行为
- 端到端测试
- 通过FileController上传大文件、断点续传、下载与预览,验证网络中断恢复与进度反馈
sequenceDiagram
participant Client as "客户端"
participant FileCtrl as "FileController"
participant FileSvc as "FileApiImpl/FileInfoServiceImpl"
participant Minio as "对象存储"
participant Preview as "KkFileViewClient"
Client->>FileCtrl : "POST 上传/分片上传"
FileCtrl->>FileSvc : "创建会话/保存分片"
FileSvc->>Minio : "写入分片"
FileSvc-->>FileCtrl : "返回会话ID"
Client->>FileCtrl : "POST 合并分片"
FileCtrl->>FileSvc : "合并并生成文件信息"
FileSvc->>Minio : "合并分片"
FileSvc-->>Client : "返回文件URL"
Client->>Preview : "GET 预览链接"
Preview-->>Client : "返回预览地址"
图表来源
- FileController.java
- FileApiImpl.java
- FileInfoServiceImpl.java
- KkFileViewClient.java
- OrphanChunkCleanupTask.java
章节来源
- FileApiImplTest.java
- KkFileViewClientTest.java
- OrphanChunkCleanupTaskTest.java
异常处理与统一响应测试要点
- 单元测试
- 对GlobalExceptionHandlerAdvice进行Mock,验证各业务异常映射到统一Result结构
- 对Result与ResultCodeEnum进行断言,确保错误码与消息一致性
- 集成测试
- 在控制器或服务中抛出MissingParameterException、PermissionErrorException、ResourceNotExistException等,验证全局异常处理器捕获并返回正确HTTP状态码
- 端到端测试
- 构造非法参数、越权访问、资源不存在等场景,断言响应体中的code、message、data字段
flowchart TD
Entry(["业务方法抛出异常"]) --> Catch["全局异常处理器捕获"]
Catch --> Classify{"异常类型分类"}
Classify --> |参数缺失| ParamErr["参数缺失错误"]
Classify --> |权限不足| PermErr["权限错误"]
Classify --> |资源不存在| ResErr["资源不存在错误"]
Classify --> |其他业务| BizErr["业务错误"]
ParamErr --> Wrap["封装为Result"]
PermErr --> Wrap
ResErr --> Wrap
BizErr --> Wrap
Wrap --> Return(["返回统一响应"])
图表来源
- GlobalExceptionHandlerAdvice.java
- BusinessErrorException.java
- MissingParameterException.java
- PermissionErrorException.java
- ResourceNotExistException.java
- Result.java
- ResultCodeEnum.java
章节来源
- GlobalExceptionHandlerAdvice.java
- Result.java
- ResultCodeEnum.java
依赖关系分析
- 模块内依赖
- crm-auth依赖crm-base(异常、结果、安全上下文、实体基类)
- crm-file依赖crm-base(结果、实体基类)
- 外部依赖
- JWT与Spring Security用于认证与鉴权
- MyBatis-Plus用于数据访问
- 对象存储(如MinIO)用于文件存储
- 第三方登录(钉钉等)与预览服务(KKFileView)
graph LR
CRM_APP["crm-app"] --> CRM_AUTH["crm-auth"]
CRM_APP --> CRM_FILE["crm-file"]
CRM_AUTH --> CRM_BASE["crm-base"]
CRM_FILE --> CRM_BASE["crm-base"]
CRM_AUTH --> EXT_OAUTH["第三方登录(OAuth)"]
CRM_FILE --> EXT_STORE["对象存储(MinIO)"]
CRM_FILE --> EXT_PREVIEW["预览服务(KKFileView)"]
图表来源
- CrmAppApplication.java
- AuthController.java
- FileController.java
章节来源
- CrmAppApplication.java
性能考虑
- 单元测试
- 避免I/O与网络调用,使用Mock减少耗时;对复杂算法进行边界值与大数据量输入测试
- 集成测试
- 使用内存数据库或测试容器缩短启动时间;合理设置事务回滚与数据隔离
- 对文件上传/下载进行流式处理与分片大小调优测试
- 新增 对用户列表等复杂查询进行性能基准测试,监控SQL执行时间和数据库负载
- 端到端测试
- 使用轻量级客户端并发模拟,关注接口响应时间与吞吐
- 性能与压力测试
- 使用JMeter或Gatling进行压测,设计阶梯加压与长稳态场景
- 监控CPU、内存、GC、线程池、连接池与慢SQL
- 安全测试
- 使用OWASP ZAP或Burp Suite进行漏洞扫描与渗透测试
- 针对JWT伪造、越权、注入、XSS等进行专项用例
故障排查指南
- 常见问题定位
- 认证失败:检查JWT签名、过期时间、过滤器链顺序与白名单配置
- 权限不足:确认用户角色、菜单权限与数据范围上下文是否正确设置
- 文件上传失败:检查分片大小、存储桶权限、网络超时与重试策略
- 异常未捕获:确认全局异常处理器是否注册、异常类型是否匹配
- 新增 用户列表查询问题:检查数据权限配置、SQL条件拼接、分页参数处理
- 调试建议
- 开启DEBUG日志,打印关键上下文(用户ID、角色、数据范围、请求ID)
- 使用Mock验证外部依赖行为,逐步缩小问题范围
- 使用集成测试复现问题,结合数据库快照与缓存状态对比
章节来源
- JwtAuthenticationFilter.java
- TokenService.java
- GlobalExceptionHandlerAdvice.java
结论
通过分层测试策略(单元、集成、端到端)、完善的Mock与测试数据管理、严格的覆盖率与持续集成规范,以及对认证、权限、文件、异常等核心能力的专项测试,可以显著提升代码质量与系统稳定性。新增的用户列表集成测试进一步增强了复杂业务场景的测试覆盖。建议将性能、压力与安全测试纳入常规流水线,形成闭环的质量保障体系。
附录
测试环境与数据准备
- 使用SpringBootTest加载最小化配置,启用内存数据库与Redis测试容器
- 使用@Sql或脚本初始化用户、角色、菜单、部门等基础数据
- 使用@DirtiesContext控制测试间上下文隔离,避免状态污染
- 新增 用户列表测试数据准备:批量创建不同部门、角色的用户数据,模拟真实业务场景
章节来源
- application.yml
Mock策略与最佳实践
- 对外部依赖(第三方登录、对象存储、预览服务)一律Mock,保证测试快速稳定
- 对内部服务与方法使用@MockBean或构造器注入Mock,明确期望行为与返回值
- 对安全上下文与权限相关逻辑,使用测试辅助类或自定义注解简化设置
- 新增 用户列表测试Mock策略:Mock数据库查询、权限验证、数据转换等依赖
章节来源
- DingTalkAuthClientTest.java
- ThirdPartyAuthClientFactoryTest.java
- FileApiImplTest.java
- KkFileViewClientTest.java
测试覆盖率要求
- 行覆盖率≥80%,分支覆盖率≥70%,关键模块(认证、权限、文件)≥90%
- 使用JaCoCo生成报告,并在CI中阻断低覆盖率提交
- 新增 用户列表功能覆盖率要求:查询逻辑、权限控制、分页处理等核心路径覆盖率≥95%
持续集成配置建议
- 在CI中执行mvn test与覆盖率聚合,失败则阻断流水线
- 并行执行单元测试与集成测试,缩短构建时间
- 生成测试报告与覆盖率HTML,归档至制品库
- 新增 集成测试优化:使用测试容器加速数据库和Redis初始化
性能与压力测试工具推荐
- JMeter/Gatling:编写脚本模拟高并发登录、文件上传与下载
- Prometheus+Grafana:采集指标与可视化监控
- APM工具(SkyWalking/Arthas):链路追踪与线上诊断
- 新增 SQL性能分析:使用MyBatis-Plus的性能监控插件分析慢查询
安全测试方法与工具
- OWASP ZAP/Burp Suite:自动化漏洞扫描与手动渗透
- 依赖漏洞扫描(Dependabot/SonarQube):检测第三方库风险
- 敏感信息与密钥管理:使用环境变量与密钥管理服务
- 新增 权限测试:验证水平越权、垂直越权、数据范围绕过等安全场景