/** * 端到端业务流程集成测试 * 测试完整的用户旅程和数据流 */ import { test, expect } from '../shared/fixtures/test-fixtures'; import { testLogger } from '../shared/utils/test-logger'; import { testReporter } from '../shared/utils/test-reporter'; test.describe('完整用户旅程测试 @integration @e2e', () => { test.beforeAll(async () => { testReporter.startReport(); }); test.afterAll(async () => { testReporter.generateAllReports('test-results/integration'); }); test('管理员完整工作流程', async ({ loginPage, dashboardPage, userManagementPage, roleManagementPage, menuManagementPage, testData }) => { testLogger.startTest('管理员完整工作流程'); // 1. 登录系统 testLogger.startStep('管理员登录'); await loginPage.navigate(); await loginPage.login('admin', 'admin123'); await dashboardPage.waitForLoad(); const pageTitle = await dashboardPage.getPageTitle(); expect(pageTitle).toContain('仪表盘'); await dashboardPage.takeScreenshot('admin-workflow-01-dashboard'); testLogger.endStep('管理员登录', 'passed'); // 2. 创建新角色 testLogger.startStep('创建新角色'); await roleManagementPage.navigate(); const roleData = testData.generateRoleData(); await roleManagementPage.createRole(roleData); await roleManagementPage.takeScreenshot('admin-workflow-02-role-created'); testLogger.endStep('创建新角色', 'passed'); // 3. 创建新用户 testLogger.startStep('创建新用户'); await userManagementPage.navigate(); await userManagementPage.clickAddUser(); const userData = testData.generateUserData(); await userManagementPage.fillUserForm(userData); await userManagementPage.submitForm(); await userManagementPage.takeScreenshot('admin-workflow-03-user-created'); testLogger.endStep('创建新用户', 'passed'); // 4. 搜索并验证用户 testLogger.startStep('搜索验证用户'); await userManagementPage.searchUser(userData.username); const isUserFound = await userManagementPage.isUserInTable(userData.username); expect(isUserFound).toBe(true); await userManagementPage.takeScreenshot('admin-workflow-04-user-found'); testLogger.endStep('搜索验证用户', 'passed'); // 5. 创建新菜单 testLogger.startStep('创建新菜单'); await menuManagementPage.navigate(); const menuData = testData.generateMenuData(); await menuManagementPage.createMenu({ menuName: menuData.menuName, path: menuData.path, icon: menuData.icon, }); await menuManagementPage.takeScreenshot('admin-workflow-05-menu-created'); testLogger.endStep('创建新菜单', 'passed'); // 6. 编辑用户 testLogger.startStep('编辑用户'); await userManagementPage.navigate(); await userManagementPage.searchUser(userData.username); await userManagementPage.clickEditFirstUser(); const updatedRealName = '修改后的' + userData.realName; await userManagementPage['page'].fill('input[placeholder="请输入真实姓名"]', updatedRealName); await userManagementPage['page'].click('button[type="submit"]:has-text("确定")'); await userManagementPage.takeScreenshot('admin-workflow-06-user-edited'); testLogger.endStep('编辑用户', 'passed'); // 7. 删除用户 testLogger.startStep('删除用户'); await userManagementPage.navigate(); await userManagementPage.searchUser(userData.username); await userManagementPage.clickDeleteFirstUser(); await userManagementPage.takeScreenshot('admin-workflow-07-user-deleted'); testLogger.endStep('删除用户', 'passed'); // 8. 登出 testLogger.startStep('管理员登出'); await dashboardPage.logout(); const isLoginPage = await loginPage.isLoginPage(); expect(isLoginPage).toBe(true); await loginPage.takeScreenshot('admin-workflow-08-logged-out'); testLogger.endStep('管理员登出', 'passed'); testLogger.endTest('管理员完整工作流程', 'passed'); }); }); test.describe('跨系统数据一致性测试 @integration @data', () => { test('Admin操作数据在Uniapp中显示', async ({ loginPage, userManagementPage, uniappCalendarPage, testData }) => { testLogger.startTest('跨系统数据一致性'); // 1. 在Admin中创建用户 await loginPage.navigate(); await loginPage.login('admin', 'admin123'); await userManagementPage.navigate(); await userManagementPage.clickAddUser(); const userData = testData.generateUserData(); await userManagementPage.fillUserForm(userData); await userManagementPage.submitForm(); // 2. 验证Uniapp可以正常访问(不需要登录) await uniappCalendarPage.navigate(); const title = await uniappCalendarPage.getPageTitle(); expect(title).toContain('万年历'); testLogger.info('跨系统数据流验证完成'); testLogger.endTest('跨系统数据一致性', 'passed'); }); }); test.describe('并发操作测试 @integration @concurrent', () => { test('多用户同时操作', async ({ browser, testData }) => { testLogger.startTest('多用户同时操作'); // 创建两个独立的浏览器上下文 const context1 = await browser.newContext(); const context2 = await browser.newContext(); const page1 = await context1.newPage(); const page2 = await context2.newPage(); try { // 用户1登录并创建用户 await page1.goto('http://localhost:5174/login'); await page1.fill('input[placeholder="请输入用户名"]', 'admin'); await page1.fill('input[placeholder="请输入密码"]', 'admin123'); await page1.click('button[type="submit"]'); await page1.waitForURL(/.*dashboard/); // 用户2同时登录 await page2.goto('http://localhost:5174/login'); await page2.fill('input[placeholder="请输入用户名"]', 'admin'); await page2.fill('input[placeholder="请输入密码"]', 'admin123'); await page2.click('button[type="submit"]'); await page2.waitForURL(/.*dashboard/); // 两个用户同时访问用户管理页面 await Promise.all([ page1.goto('http://localhost:5174/users'), page2.goto('http://localhost:5174/users'), ]); await page1.waitForTimeout(2000); await page2.waitForTimeout(2000); // 验证两个页面都正常加载 const page1Title = await page1.locator('.page-title').textContent(); const page2Title = await page2.locator('.page-title').textContent(); expect(page1Title).toContain('用户管理'); expect(page2Title).toContain('用户管理'); testLogger.info('并发访问测试通过'); } finally { await context1.close(); await context2.close(); } testLogger.endTest('多用户同时操作', 'passed'); }); }); test.describe('系统恢复测试 @integration @recovery', () => { test('页面刷新后状态保持', async ({ loginPage, dashboardPage, userManagementPage }) => { testLogger.startTest('页面刷新后状态保持'); // 1. 登录 await loginPage.navigate(); await loginPage.login('admin', 'admin123'); await dashboardPage.waitForLoad(); // 2. 导航到用户管理 await userManagementPage.navigate(); // 3. 刷新页面 await userManagementPage.reload(); // 4. 验证仍然保持登录状态 const currentURL = await userManagementPage.getCurrentURL(); expect(currentURL).toContain('/users'); // 5. 验证页面正常显示 const pageTitle = await userManagementPage['page'].locator('.page-title').textContent(); expect(pageTitle).toContain('用户管理'); testLogger.endTest('页面刷新后状态保持', 'passed'); }); test('网络恢复后自动重试', async ({ loginPage, userManagementPage, testData }) => { testLogger.startTest('网络恢复后自动重试'); // 1. 登录 await loginPage.navigate(); await loginPage.login('admin', 'admin123'); // 2. 进入用户管理 await userManagementPage.navigate(); await userManagementPage.clickAddUser(); // 3. 填写表单 const userData = testData.generateUserData(); await userManagementPage.fillUserForm(userData); // 4. 模拟网络断开 await userManagementPage['page'].context().setOffline(true); // 5. 尝试提交 await userManagementPage['page'].click('button[type="submit"]:has-text("确定")'); await userManagementPage.waitForTimeout(2000); // 6. 恢复网络 await userManagementPage['page'].context().setOffline(false); // 7. 重新提交 await userManagementPage['page'].click('button[type="submit"]:has-text("确定")'); // 8. 验证成功 const successMessage = userManagementPage['page'].locator('.ant-message-success'); await expect(successMessage).toBeVisible({ timeout: 10000 }); testLogger.endTest('网络恢复后自动重试', 'passed'); }); });