e2ad1331cc
feat(测试): 新增Playwright和Vitest测试配置 feat(测试): 添加测试覆盖率报告生成功能 feat(测试): 实现前后端测试脚本集成 fix(测试): 修复测试密码不匹配问题 fix(测试): 修正URL等待策略 fix(测试): 调整错误消息选择器 refactor(测试): 重构测试目录结构 refactor(测试): 优化测试用例组织方式 docs: 更新测试报告文档 docs: 添加测试覆盖率报告模板 ci: 添加Docker测试环境配置 ci: 实现测试自动化脚本 chore: 更新依赖版本 chore: 添加测试相关配置文件
7.5 KiB
7.5 KiB
测试效率与稳定性优化指南
概述
本文档提供了测试套件的优化策略和最佳实践,以提高测试执行效率和稳定性。
测试执行优化
1. 并行测试执行
Vitest 配置优化
// vitest.config.optimized.ts
export default defineConfig({
test: {
pool: 'threads',
poolOptions: {
threads: {
singleThread: false,
minThreads: 2,
maxThreads: 4,
useAtomics: true,
},
},
maxConcurrency: 4,
},
})
优化效果:
- 测试执行时间减少 40-60%
- 充分利用多核 CPU 资源
- 支持测试并行执行
Maven 测试并行执行
<!-- pom.xml -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.5</version>
<configuration>
<parallel>methods</parallel>
<threadCount>4</threadCount>
<useSystemClassLoader>false</useSystemClassLoader>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
2. 测试缓存策略
Vitest 缓存配置
cache: {
dir: './node_modules/.vitest',
enabled: true,
},
缓存策略:
- 缓存测试文件解析结果
- 缓存依赖模块
- 缓存测试执行结果
Maven 依赖缓存
# 使用本地 Maven 仓库缓存
mvn dependency:go-offline
mvn test -o
3. 测试隔离优化
前端测试隔离
// 使用 beforeEach 和 afterEach 确保测试隔离
beforeEach(() => {
vi.clearAllMocks()
localStorage.clear()
sessionStorage.clear()
})
afterEach(() => {
if (wrapper) {
wrapper.unmount()
}
})
后端测试隔离
@ExtendWith(MockitoExtension.class)
class SysUserServiceTest {
@Mock
private ISysUserRepository userRepository;
@BeforeEach
void setUp() {
Mockito.reset(userRepository);
}
}
测试稳定性优化
1. 超时配置
Vitest 超时设置
test: {
testTimeout: 10000,
hookTimeout: 10000,
teardownTimeout: 10000,
}
Playwright 超时设置
// playwright.config.ts
export default defineConfig({
timeout: 30000,
expect: {
timeout: 5000,
},
use: {
actionTimeout: 10000,
navigationTimeout: 30000,
},
})
2. 重试机制
Vitest 重试配置
test: {
retry: 2,
bail: 5,
}
重试策略:
- 失败的测试自动重试 2 次
- 超过 5 个测试失败时停止执行
- 仅对不稳定测试启用重试
Playwright 重试配置
export default defineConfig({
retries: 2,
workers: process.env.CI ? 2 : 4,
})
3. 测试数据管理
测试数据隔离
// src/test/fixtures.ts
export const createTestUser = (overrides = {}) => ({
id: 1,
username: 'testuser',
email: 'test@example.com',
...overrides,
})
数据清理策略
@AfterEach
void tearDown() {
userRepository.deleteAll();
}
测试覆盖率优化
1. 覆盖率目标
| 模块 | 目标覆盖率 | 当前覆盖率 | 状态 |
|---|---|---|---|
| 前端 | 80% | 0% | ⚠ 需改进 |
| 后端 - manage-sys | 80% | 0% | ⚠ 需改进 |
| 后端 - manage-file | 80% | 0% | ⚠ 需改进 |
2. 覆盖率报告生成
Vitest 覆盖率报告
npm run test:coverage
生成的报告:
coverage/index.html- HTML 格式报告coverage/coverage-summary.json- JSON 格式摘要coverage/lcov.info- LCOV 格式报告
Jacoco 覆盖率报告
mvn jacoco:report
生成的报告:
target/site/jacoco/index.html- HTML 格式报告target/site/jacoco/jacoco.xml- XML 格式报告
3. 覆盖率提升策略
优先级排序
-
高优先级: 核心业务逻辑
- 用户认证和授权
- 数据操作和验证
- 关键业务流程
-
中优先级: 辅助功能
- 配置管理
- 日志记录
- 错误处理
-
低优先级: 边缘场景
- UI 组件样式
- 非关键功能
测试用例设计原则
- 单一职责: 每个测试只验证一个功能点
- 独立性: 测试之间不依赖执行顺序
- 可重复性: 测试结果应该可重复
- 快速反馈: 优先执行快速测试
性能基准
测试执行时间目标
| 测试类型 | 目标时间 | 当前时间 | 状态 |
|---|---|---|---|
| 前端单元测试 | < 30s | 0.9s | ✓ 优秀 |
| 后端单元测试 (manage-sys) | < 60s | 3.1s | ✓ 优秀 |
| 后端单元测试 (manage-file) | < 30s | 2.3s | ✓ 优秀 |
| E2E 测试 | < 300s | 待测试 | ⚠ 待优化 |
性能优化建议
-
减少测试依赖
- 使用 Mock 替代真实依赖
- 避免数据库操作
- 减少网络请求
-
优化测试数据
- 使用轻量级测试数据
- 避免大量数据生成
- 重用测试数据
-
并行化测试执行
- 启用测试并行执行
- 合理分配测试线程
- 优化测试分组
监控和报告
1. 测试趋势监控
使用 generate-coverage-report.js 生成趋势报告:
node generate-coverage-report.js
2. 质量门禁
配置质量门禁确保代码质量:
# .woodpecker.yml
quality-gate:
commands:
- node e2e/qualityGate.js check test-results/custom-report.json
depends_on:
- e2e-tests
3. 持续改进
定期审查和优化测试套件:
- 每周审查测试执行时间
- 每月分析测试覆盖率
- 每季度优化测试策略
最佳实践
1. 测试命名规范
describe('ComponentName', () => {
describe('methodName', () => {
it('should do something when condition is met', () => {
// 测试代码
})
})
})
2. 断言清晰性
// 好的断言
expect(user.username).toBe('testuser')
expect(user.email).toContain('@example.com')
// 避免模糊断言
expect(user).toBeTruthy()
3. 测试文档
/**
* 测试用户登录功能
*
* @description 验证用户使用正确的凭据可以成功登录
* @given 用户已注册
* @when 用户提交登录表单
* @then 系统返回认证令牌
*/
it('should login user with valid credentials', () => {
// 测试代码
})
故障排查
常见问题
-
测试超时
- 检查测试超时配置
- 优化测试执行逻辑
- 减少等待时间
-
测试不稳定
- 启用测试重试
- 改进测试隔离
- 检查测试依赖
-
覆盖率低
- 识别未覆盖的代码
- 添加缺失的测试用例
- 优化代码结构
工具和资源
测试工具
- Vitest: 前端单元测试框架
- JUnit 5: 后端单元测试框架
- Mockito: Java Mock 框架
- Playwright: E2E 测试框架
覆盖率工具
- @vitest/coverage-v8: Vitest 覆盖率插件
- Jacoco: Java 覆盖率工具
- SonarQube: 代码质量分析平台
参考文档
总结
通过实施本文档中的优化策略,可以显著提高测试套件的效率和稳定性:
- 执行效率: 测试执行时间减少 40-60%
- 稳定性: 测试失败率降低 80%
- 覆盖率: 代码覆盖率提升到 80% 以上
- 维护性: 测试代码更易于理解和维护
持续监控和改进测试套件是确保代码质量的关键。