Files
novalon-manage-system/novalon-manage-web/e2e/test-stability.spec.ts
T
张翔 af44c23f21 refactor(security): 重构安全配置并优化测试环境
- 移除旧的测试套件和UAT测试文件
- 更新密码编码器配置使用BCrypt strength=12
- 添加用户角色关联表和相关服务
- 优化前端日期显示格式
- 清理无用资源和配置文件
- 增强测试数据管理和清理功能
2026-03-27 13:00:22 +08:00

306 lines
11 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { LoginPage } from './pages/LoginPage';
import { DashboardPage } from './pages/DashboardPage';
import { UserManagementPage } from './pages/UserManagementPage';
import { TestDataCleanup } from './utils/TestDataCleanup';
import { TestHelpers } from './utils/TestHelpers';
test.describe('测试稳定性增强验证', () => {
let testDataCleanup: TestDataCleanup;
test.beforeEach(async ({ page }) => {
testDataCleanup = new TestDataCleanup(page);
});
test.afterEach(async ({ page }) => {
await testDataCleanup.cleanupAll();
});
test('STAB-001: 页面加载稳定性测试', async ({ page }) => {
const loginPage = new LoginPage(page);
const dashboardPage = new DashboardPage(page);
await test.step('1. 测试登录页面加载稳定性', async () => {
for (let i = 0; i < 3; i++) {
await loginPage.goto();
await TestHelpers.waitForPageLoad(page);
const isUsernameVisible = await TestHelpers.isElementVisible(loginPage.usernameInput);
const isPasswordVisible = await TestHelpers.isElementVisible(loginPage.passwordInput);
const isLoginButtonVisible = await TestHelpers.isElementVisible(loginPage.loginButton);
expect(isUsernameVisible).toBeTruthy();
expect(isPasswordVisible).toBeTruthy();
expect(isLoginButtonVisible).toBeTruthy();
await page.reload();
}
});
await test.step('2. 测试登录流程稳定性', async () => {
await loginPage.goto();
await loginPage.usernameInput.fill('admin');
await loginPage.passwordInput.fill('admin123');
await loginPage.loginButton.click();
const navigationSuccess = await TestHelpers.waitForNavigation(page, /.*dashboard/);
expect(navigationSuccess).toBeTruthy();
await TestHelpers.waitForNetworkIdle(page);
});
await test.step('3. 测试Dashboard页面加载稳定性', async () => {
for (let i = 0; i < 3; i++) {
await page.goto('/dashboard');
await TestHelpers.waitForPageLoad(page);
const dashboardContent = page.locator('.dashboard');
const isVisible = await TestHelpers.isElementVisible(dashboardContent);
expect(isVisible).toBeTruthy();
await page.reload();
}
});
});
test('STAB-002: 元素交互稳定性测试', async ({ page }) => {
const loginPage = new LoginPage(page);
const dashboardPage = new DashboardPage(page);
const userManagementPage = new UserManagementPage(page);
await test.step('1. 登录系统', async () => {
await loginPage.goto();
await loginPage.usernameInput.fill('admin');
await loginPage.passwordInput.fill('admin123');
await loginPage.loginButton.click();
await TestHelpers.waitForNavigation(page, /.*dashboard/);
await TestHelpers.waitForNetworkIdle(page);
});
await test.step('2. 测试按钮点击稳定性', async () => {
await dashboardPage.navigateToUserManagement();
await TestHelpers.waitForNetworkIdle(page);
const createUserButton = userManagementPage.createUserButton;
const clickSuccess = await TestHelpers.safeClick(createUserButton);
expect(clickSuccess).toBeTruthy();
await TestHelpers.waitForModal(page);
const modalVisible = await TestHelpers.waitForModal(page);
expect(modalVisible).toBeTruthy();
await TestHelpers.closeModal(page);
});
await test.step('3. 测试表单输入稳定性', async () => {
await userManagementPage.clickCreateUser();
await TestHelpers.waitForModal(page);
const timestamp = Date.now();
const userData = {
username: `stab_user_${timestamp}`,
nickname: `稳定性测试用户${timestamp}`,
email: `stab_${timestamp}@example.com`,
phone: '13800138000',
password: 'Test123!@#',
confirmPassword: 'Test123!@#',
};
testDataCleanup.trackUser(userData.username);
await userManagementPage.fillUserForm(userData);
await userManagementPage.submitForm();
const successVisible = await TestHelpers.waitForSuccessMessage(page, 5000);
expect(successVisible).toBeTruthy();
});
});
test('STAB-003: 网络请求稳定性测试', async ({ page }) => {
const loginPage = new LoginPage(page);
const dashboardPage = new DashboardPage(page);
const userManagementPage = new UserManagementPage(page);
await test.step('1. 登录系统', async () => {
await loginPage.goto();
await loginPage.usernameInput.fill('admin');
await loginPage.passwordInput.fill('admin123');
await loginPage.loginButton.click();
await TestHelpers.waitForNavigation(page, /.*dashboard/);
await TestHelpers.waitForNetworkIdle(page);
});
await test.step('2. 测试API请求重试机制', async () => {
await dashboardPage.navigateToUserManagement();
await TestHelpers.waitForNetworkIdle(page);
const initialRowCount = await userManagementPage.getTableRowCount();
expect(initialRowCount).toBeGreaterThanOrEqual(0);
await userManagementPage.searchInput.fill('admin');
await userManagementPage.searchButton.click();
await TestHelpers.waitForNetworkIdle(page);
const searchRowCount = await userManagementPage.getTableRowCount();
expect(searchRowCount).toBeGreaterThanOrEqual(0);
await userManagementPage.clearSearch();
await TestHelpers.waitForNetworkIdle(page);
const finalRowCount = await userManagementPage.getTableRowCount();
expect(finalRowCount).toBeGreaterThanOrEqual(0);
});
});
test('STAB-004: 等待策略稳定性测试', async ({ page }) => {
const loginPage = new LoginPage(page);
const dashboardPage = new DashboardPage(page);
await test.step('1. 测试元素可见性等待', async () => {
await loginPage.goto();
const usernameVisible = await TestHelpers.waitForElementVisible(loginPage.usernameInput, 5000);
expect(usernameVisible).toBeTruthy();
const passwordVisible = await TestHelpers.waitForElementVisible(loginPage.passwordInput, 5000);
expect(passwordVisible).toBeTruthy();
const loginButtonVisible = await TestHelpers.waitForElementVisible(loginPage.loginButton, 5000);
expect(loginButtonVisible).toBeTruthy();
});
await test.step('2. 测试网络空闲等待', async () => {
await loginPage.usernameInput.fill('admin');
await loginPage.passwordInput.fill('admin123');
await loginPage.loginButton.click();
await TestHelpers.waitForNetworkIdle(page, 10000);
const currentUrl = page.url();
expect(currentUrl).toContain('dashboard');
});
await test.step('3. 测试加载完成等待', async () => {
await page.goto('/dashboard');
await TestHelpers.waitForPageLoad(page, 10000);
const dashboardContent = page.locator('.dashboard');
const isVisible = await TestHelpers.isElementVisible(dashboardContent);
expect(isVisible).toBeTruthy();
});
});
test('STAB-005: 错误处理稳定性测试', async ({ page }) => {
const loginPage = new LoginPage(page);
const dashboardPage = new DashboardPage(page);
const userManagementPage = new UserManagementPage(page);
await test.step('1. 测试无效登录处理', async () => {
await loginPage.goto();
await loginPage.usernameInput.fill('invalid_user');
await loginPage.passwordInput.fill('invalid_password');
await loginPage.loginButton.click();
await page.waitForTimeout(2000);
const currentUrl = page.url();
expect(currentUrl).toContain('login');
});
await test.step('2. 测试表单验证错误处理', async () => {
await loginPage.usernameInput.fill('admin');
await loginPage.passwordInput.fill('admin123');
await loginPage.loginButton.click();
await TestHelpers.waitForNavigation(page, /.*dashboard/);
await TestHelpers.waitForNetworkIdle(page);
await dashboardPage.navigateToUserManagement();
await userManagementPage.clickCreateUser();
await TestHelpers.waitForModal(page);
await userManagementPage.submitForm();
await page.waitForTimeout(500);
const errorMessageVisible = await TestHelpers.waitForErrorMessage(page, 3000);
expect(errorMessageVisible).toBeTruthy();
});
await test.step('3. 测试网络错误处理', async () => {
await TestHelpers.closeModal(page);
const timestamp = Date.now();
const userData = {
username: `error_test_${timestamp}`,
nickname: `错误测试用户${timestamp}`,
email: `error_${timestamp}@example.com`,
phone: '13800138000',
password: 'Test123!@#',
confirmPassword: 'Test123!@#',
};
testDataCleanup.trackUser(userData.username);
await userManagementPage.fillUserForm(userData);
await userManagementPage.submitForm();
const successVisible = await TestHelpers.waitForSuccessMessage(page, 5000);
expect(successVisible).toBeTruthy();
});
});
test('STAB-006: 重试机制稳定性测试', async ({ page }) => {
const loginPage = new LoginPage(page);
const dashboardPage = new DashboardPage(page);
const userManagementPage = new UserManagementPage(page);
await test.step('1. 登录系统', async () => {
await loginPage.goto();
await loginPage.usernameInput.fill('admin');
await loginPage.passwordInput.fill('admin123');
await loginPage.loginButton.click();
await TestHelpers.waitForNavigation(page, /.*dashboard/);
await TestHelpers.waitForNetworkIdle(page);
});
await test.step('2. 测试操作重试机制', async () => {
await dashboardPage.navigateToUserManagement();
await TestHelpers.waitForNetworkIdle(page);
const clickResult = await TestHelpers.retryOperation(
async () => {
await userManagementPage.clickCreateUser();
return true;
},
3,
1000
);
expect(clickResult).toBeTruthy();
});
await test.step('3. 测试表单提交重试机制', async () => {
const timestamp = Date.now();
const userData = {
username: `retry_test_${timestamp}`,
nickname: `重试测试用户${timestamp}`,
email: `retry_${timestamp}@example.com`,
phone: '13800138000',
password: 'Test123!@#',
confirmPassword: 'Test123!@#',
};
testDataCleanup.trackUser(userData.username);
const submitResult = await TestHelpers.retryOperation(
async () => {
await userManagementPage.fillUserForm(userData);
await userManagementPage.submitForm();
const successVisible = await TestHelpers.waitForSuccessMessage(page, 3000);
return successVisible;
},
2,
2000
);
expect(submitResult).toBeTruthy();
});
});
});