Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
429 lines
9.2 KiB
Markdown
429 lines
9.2 KiB
Markdown
# 端到端测试指南
|
||
|
||
这是 Telegram 管理系统的完整端到端测试套件,使用 Playwright 进行自动化测试。
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
# 安装 Playwright 浏览器
|
||
pnpm test:install
|
||
|
||
# 或手动安装
|
||
npx playwright install
|
||
```
|
||
|
||
### 运行测试
|
||
|
||
```bash
|
||
# 运行所有测试
|
||
pnpm test
|
||
|
||
# 运行特定测试文件
|
||
pnpm test:auth # 登录认证测试
|
||
pnpm test:account # 账号管理测试
|
||
pnpm test:message # 私信群发测试
|
||
pnpm test:marketing # 营销中心测试
|
||
pnpm test:permission # 权限控制测试
|
||
pnpm test:websocket # WebSocket实时通信测试
|
||
pnpm test:responsive # 响应式布局测试
|
||
|
||
# 运行特定浏览器测试
|
||
pnpm test:chrome # Chrome浏览器
|
||
pnpm test:firefox # Firefox浏览器
|
||
pnpm test:safari # Safari浏览器
|
||
pnpm test:mobile # 移动端测试
|
||
|
||
# 有头模式运行(显示浏览器界面)
|
||
pnpm test:headed
|
||
|
||
# 使用测试UI界面
|
||
pnpm test:ui
|
||
|
||
# 查看测试报告
|
||
pnpm test:report
|
||
```
|
||
|
||
## 📁 测试文件结构
|
||
|
||
```
|
||
tests/
|
||
├── e2e/ # 端到端测试
|
||
│ ├── auth.test.ts # 登录认证流程测试
|
||
│ ├── account-management.test.ts # 账号管理功能测试
|
||
│ ├── private-message.test.ts # 私信群发功能测试
|
||
│ ├── marketing-center.test.ts # 营销中心功能测试
|
||
│ ├── permission-control.test.ts # 权限控制功能测试
|
||
│ ├── websocket-realtime.test.ts # WebSocket实时通信测试
|
||
│ └── responsive-layout.test.ts # 响应式布局测试
|
||
├── global-setup.ts # 全局测试设置
|
||
├── global-teardown.ts # 全局测试清理
|
||
└── README.md # 测试指南
|
||
```
|
||
|
||
## 🧪 测试覆盖范围
|
||
|
||
### 1. 登录认证测试 (`auth.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ 登录页面显示
|
||
- ✅ 表单验证
|
||
- ✅ 登录流程
|
||
- ✅ 记住密码功能
|
||
- ✅ 语言切换
|
||
- ✅ Token过期处理
|
||
- ✅ 退出登录
|
||
- ✅ 页面刷新状态保持
|
||
- ✅ 多标签页同步
|
||
- ✅ 权限角色测试
|
||
- ✅ 国际化功能
|
||
|
||
**测试账号**:
|
||
|
||
```javascript
|
||
// 管理员账号
|
||
admin / 111111;
|
||
|
||
// 超级管理员
|
||
super_admin / super123456;
|
||
|
||
// 普通用户
|
||
test_user / test123456;
|
||
```
|
||
|
||
### 2. 账号管理测试 (`account-management.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ 账号列表显示
|
||
- ✅ 搜索筛选功能
|
||
- ✅ 创建新账号
|
||
- ✅ 表单验证
|
||
- ✅ 编辑账号信息
|
||
- ✅ 查看账号详情
|
||
- ✅ 账号状态切换
|
||
- ✅ 批量操作
|
||
- ✅ 导出功能
|
||
- ✅ 分页功能
|
||
- ✅ 表格排序
|
||
- ✅ 删除账号
|
||
- ✅ 账号导入功能
|
||
|
||
### 3. 私信群发测试 (`private-message.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ 消息模板管理
|
||
- ✅ 创建消息模板
|
||
- ✅ 模板预览功能
|
||
- ✅ 编辑模板
|
||
- ✅ 变量替换功能
|
||
- ✅ 群发任务管理
|
||
- ✅ 创建群发任务
|
||
- ✅ 任务状态管理
|
||
- ✅ 任务详情页面
|
||
- ✅ 任务暂停恢复
|
||
- ✅ 发送记录查看
|
||
- ✅ 记录搜索筛选
|
||
- ✅ 记录详情查看
|
||
- ✅ 记录导出
|
||
- ✅ 统计图表
|
||
- ✅ 实时监控
|
||
|
||
### 4. 营销中心测试 (`marketing-center.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ 智能活动管理
|
||
- ✅ 创建营销活动
|
||
- ✅ 活动状态管理
|
||
- ✅ 活动详情页面
|
||
- ✅ 智能推荐功能
|
||
- ✅ 活动复制功能
|
||
- ✅ 客户分析
|
||
- ✅ 客户分群功能
|
||
- ✅ 客户行为分析
|
||
- ✅ 客户价值分析
|
||
- ✅ 客户流失分析
|
||
- ✅ 效果统计
|
||
- ✅ 时间范围筛选
|
||
- ✅ 渠道对比分析
|
||
- ✅ 活动效果对比
|
||
- ✅ 转化漏斗分析
|
||
- ✅ ROI分析
|
||
- ✅ 报告导出
|
||
|
||
### 5. 权限控制测试 (`permission-control.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ 权限管理页面
|
||
- ✅ 创建新权限
|
||
- ✅ 权限树展开折叠
|
||
- ✅ 权限详情查看
|
||
- ✅ 编辑权限信息
|
||
- ✅ 权限搜索功能
|
||
- ✅ 删除权限
|
||
- ✅ 角色管理页面
|
||
- ✅ 创建新角色
|
||
- ✅ 角色权限分配
|
||
- ✅ 角色状态切换
|
||
- ✅ 角色复制功能
|
||
- ✅ 删除角色
|
||
- ✅ 路由权限验证
|
||
- ✅ 菜单权限过滤
|
||
- ✅ 按钮权限控制
|
||
- ✅ API权限验证
|
||
- ✅ 权限缓存更新
|
||
- ✅ v-permission指令
|
||
|
||
### 6. WebSocket实时通信测试 (`websocket-realtime.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ WebSocket连接建立
|
||
- ✅ 断线重连机制
|
||
- ✅ 手动重连功能
|
||
- ✅ 连接心跳机制
|
||
- ✅ 系统通知接收
|
||
- ✅ 消息状态更新
|
||
- ✅ 用户在线状态
|
||
- ✅ 任务进度更新
|
||
- ✅ 实时性能指标
|
||
- ✅ 实时日志显示
|
||
- ✅ 告警信息推送
|
||
- ✅ 实时图表更新
|
||
- ✅ 多标签页同步
|
||
|
||
### 7. 响应式布局测试 (`responsive-layout.test.ts`)
|
||
|
||
**测试功能**:
|
||
|
||
- ✅ 桌面端布局
|
||
- ✅ 侧边栏折叠展开
|
||
- ✅ 桌面端表格显示
|
||
- ✅ 平板端布局适配
|
||
- ✅ 平板端表格优化
|
||
- ✅ 平板端搜索表单
|
||
- ✅ 手机端移动导航
|
||
- ✅ 手机端侧边栏抽屉
|
||
- ✅ 手机端卡片布局
|
||
- ✅ 手机端搜索折叠
|
||
- ✅ 手机端表单适配
|
||
- ✅ 大屏幕内容显示
|
||
- ✅ 大屏幕表格列数
|
||
- ✅ 大屏幕仪表盘
|
||
- ✅ 响应式断点测试
|
||
- ✅ 触摸设备交互
|
||
- ✅ 触摸滑动功能
|
||
- ✅ 触摸点击区域
|
||
- ✅ 长按菜单功能
|
||
|
||
## 🔧 测试配置
|
||
|
||
### Playwright 配置 (`playwright.config.ts`)
|
||
|
||
```typescript
|
||
export default defineConfig({
|
||
testDir: './tests/e2e',
|
||
fullyParallel: true,
|
||
retries: process.env.CI ? 2 : 0,
|
||
workers: process.env.CI ? 1 : undefined,
|
||
|
||
// 测试报告
|
||
reporter: [
|
||
['html', { outputFolder: 'test-results/html-report' }],
|
||
['json', { outputFile: 'test-results/results.json' }],
|
||
['junit', { outputFile: 'test-results/results.xml' }],
|
||
['line'],
|
||
],
|
||
|
||
// 支持的浏览器
|
||
projects: [
|
||
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
|
||
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
|
||
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
|
||
{ name: 'Mobile Chrome', use: { ...devices['Pixel 5'] } },
|
||
{ name: 'Mobile Safari', use: { ...devices['iPhone 12'] } },
|
||
{ name: 'Microsoft Edge', use: { ...devices['Desktop Edge'] } },
|
||
],
|
||
|
||
// 本地开发服务器
|
||
webServer: {
|
||
command: 'pnpm dev',
|
||
port: 5173,
|
||
reuseExistingServer: !process.env.CI,
|
||
},
|
||
});
|
||
```
|
||
|
||
### 测试环境变量
|
||
|
||
```bash
|
||
# .env.test
|
||
NODE_ENV=test
|
||
VITE_API_URL=http://localhost:3001/api
|
||
VITE_WS_URL=ws://localhost:3001/ws
|
||
```
|
||
|
||
## 📊 测试报告
|
||
|
||
测试完成后,报告文件位于:
|
||
|
||
```
|
||
test-results/
|
||
├── html-report/ # HTML格式测试报告
|
||
├── results.json # JSON格式测试结果
|
||
├── results.xml # JUnit格式测试结果
|
||
├── test-summary.json # 测试摘要
|
||
└── artifacts/ # 测试截图和视频
|
||
```
|
||
|
||
### 查看测试报告
|
||
|
||
```bash
|
||
# 查看HTML报告
|
||
pnpm test:report
|
||
|
||
# 或直接打开
|
||
open test-results/html-report/index.html
|
||
```
|
||
|
||
## 🐛 调试测试
|
||
|
||
### 调试模式
|
||
|
||
```bash
|
||
# 有头模式运行(显示浏览器)
|
||
pnpm test:headed
|
||
|
||
# 使用调试器
|
||
pnpm test --debug
|
||
|
||
# 运行特定测试并暂停
|
||
npx playwright test --headed --debug tests/e2e/auth.test.ts
|
||
```
|
||
|
||
### 生成测试代码
|
||
|
||
```bash
|
||
# 使用录制器生成测试代码
|
||
npx playwright codegen http://localhost:5173
|
||
```
|
||
|
||
### 查看测试追踪
|
||
|
||
```bash
|
||
# 生成追踪文件
|
||
pnpm test --trace on
|
||
|
||
# 查看追踪
|
||
npx playwright show-trace test-results/trace.zip
|
||
```
|
||
|
||
## 📝 编写测试
|
||
|
||
### 基本测试结构
|
||
|
||
```typescript
|
||
import { test, expect, Page } from '@playwright/test';
|
||
|
||
test.describe('功能模块测试', () => {
|
||
test.beforeEach(async ({ page }) => {
|
||
// 测试前置条件
|
||
await page.goto('http://localhost:5173');
|
||
await login(page);
|
||
});
|
||
|
||
test('应该正确显示页面', async ({ page }) => {
|
||
// 测试步骤
|
||
await page.click('[data-testid="button"]');
|
||
|
||
// 断言
|
||
await expect(page.locator('.result')).toBeVisible();
|
||
});
|
||
});
|
||
```
|
||
|
||
### 最佳实践
|
||
|
||
1. **使用 data-testid 属性**
|
||
|
||
```html
|
||
<button data-testid="submit-button">提交</button>
|
||
```
|
||
|
||
2. **等待异步操作完成**
|
||
|
||
```typescript
|
||
await page.waitForLoadState('networkidle');
|
||
await page.waitForSelector('[data-testid="content"]');
|
||
```
|
||
|
||
3. **使用页面对象模式**
|
||
```typescript
|
||
class LoginPage {
|
||
constructor(private page: Page) {}
|
||
|
||
async login(username: string, password: string) {
|
||
await this.page.fill('[data-testid="username"]', username);
|
||
await this.page.fill('[data-testid="password"]', password);
|
||
await this.page.click('[data-testid="login-button"]');
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔍 CI/CD 集成
|
||
|
||
### GitHub Actions 示例
|
||
|
||
```yaml
|
||
name: E2E Tests
|
||
|
||
on: [push, pull_request]
|
||
|
||
jobs:
|
||
test:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
- uses: actions/setup-node@v3
|
||
with:
|
||
node-version: '18'
|
||
|
||
- name: Install dependencies
|
||
run: pnpm install
|
||
|
||
- name: Install Playwright
|
||
run: pnpm test:install
|
||
|
||
- name: Run tests
|
||
run: pnpm test
|
||
|
||
- name: Upload test results
|
||
uses: actions/upload-artifact@v3
|
||
if: always()
|
||
with:
|
||
name: test-results
|
||
path: test-results/
|
||
```
|
||
|
||
## 📞 支持
|
||
|
||
如有问题,请:
|
||
|
||
1. 查看 [Playwright 官方文档](https://playwright.dev/)
|
||
2. 检查测试日志和错误信息
|
||
3. 联系开发团队
|
||
|
||
## 📄 更新日志
|
||
|
||
### v1.0.0
|
||
|
||
- 初始版本发布
|
||
- 支持所有主要功能模块测试
|
||
- 多浏览器和移动端支持
|
||
- 完整的CI/CD集成
|