fix: 修复测试中操作admin用户导致后续测试失败的问题
- 修复密码哈希格式问题(从$2a$改为$2b$) - 更新所有测试用例密码从Test@123改为admin123 - 修改测试2.3、2.5、2.6,避免操作admin用户(第1行) - 在beforeEach中添加页面初始化,避免localStorage访问错误 - 添加测试数据清理机制
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
|
||||||
|
public class GenerateHash {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12);
|
||||||
|
String password = "admin123";
|
||||||
|
String hash = encoder.encode(password);
|
||||||
|
System.out.println("Password: " + password);
|
||||||
|
System.out.println("Hash: " + hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
|
||||||
|
public class PasswordTest {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12);
|
||||||
|
|
||||||
|
String hash = "$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C";
|
||||||
|
|
||||||
|
// 测试常见密码
|
||||||
|
String[] passwords = {"admin", "Admin@123", "Test@123", "password", "123456", "admin123"};
|
||||||
|
|
||||||
|
for (String password : passwords) {
|
||||||
|
boolean matches = encoder.matches(password, hash);
|
||||||
|
System.out.println(password + ": " + matches);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成新的哈希
|
||||||
|
String newHash = encoder.encode("Test@123");
|
||||||
|
System.out.println("\nNew hash for 'Test@123': " + newHash);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,12 +13,12 @@ VALUES
|
|||||||
-- BCrypt哈希值对应明文密码: admin123
|
-- BCrypt哈希值对应明文密码: admin123
|
||||||
INSERT INTO sys_user (id, username, password, email, phone, nickname, status, create_by, update_by)
|
INSERT INTO sys_user (id, username, password, email, phone, nickname, status, create_by, update_by)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'admin', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'admin@novalon.com', '13800138000', '超级管理员', 1, 'system', 'system'),
|
(1, 'admin', '$2b$12$iu5PcPjmZPfp30E66v08gu.iaBeB4CgtkE1VeFtldksmdWVzgPrzu', 'admin@novalon.com', '13800138000', '超级管理员', 1, 'system', 'system'),
|
||||||
(2, 'testadmin', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'testadmin@novalon.com', '13800138001', '测试管理员', 1, 'system', 'system'),
|
(2, 'testadmin', '$2b$12$iu5PcPjmZPfp30E66v08gu.iaBeB4CgtkE1VeFtldksmdWVzgPrzu', 'testadmin@novalon.com', '13800138001', '测试管理员', 1, 'system', 'system'),
|
||||||
(3, 'normaluser', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'normaluser@novalon.com', '13800138002', '普通用户', 1, 'system', 'system'),
|
(3, 'normaluser', '$2b$12$iu5PcPjmZPfp30E66v08gu.iaBeB4CgtkE1VeFtldksmdWVzgPrzu', 'normaluser@novalon.com', '13800138002', '普通用户', 1, 'system', 'system'),
|
||||||
(4, 'guestuser', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'guestuser@novalon.com', '13800138003', '访客用户', 1, 'system', 'system'),
|
(4, 'guestuser', '$2b$12$iu5PcPjmZPfp30E66v08gu.iaBeB4CgtkE1VeFtldksmdWVzgPrzu', 'guestuser@novalon.com', '13800138003', '访客用户', 1, 'system', 'system'),
|
||||||
(5, 'disableduser', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'disableduser@novalon.com', '13800138004', '禁用用户', 0, 'system', 'system'),
|
(5, 'disableduser', '$2b$12$iu5PcPjmZPfp30E66v08gu.iaBeB4CgtkE1VeFtldksmdWVzgPrzu', 'disableduser@novalon.com', '13800138004', '禁用用户', 0, 'system', 'system'),
|
||||||
(10, 'e2e_test_user', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'e2e@test.com', '13900139000', 'E2E测试用户', 1, 'system', 'system');
|
(10, 'e2e_test_user', '$2b$12$iu5PcPjmZPfp30E66v08gu.iaBeB4CgtkE1VeFtldksmdWVzgPrzu', 'e2e@test.com', '13900139000', 'E2E测试用户', 1, 'system', 'system');
|
||||||
|
|
||||||
-- 为用户分配角色
|
-- 为用户分配角色
|
||||||
INSERT INTO user_role (user_id, role_id, created_by)
|
INSERT INTO user_role (user_id, role_id, created_by)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ test.describe('登录诊断测试', () => {
|
|||||||
console.log(` - 登录按钮: ${loginButtonVisible ? '可见' : '不可见'}`);
|
console.log(` - 登录按钮: ${loginButtonVisible ? '可见' : '不可见'}`);
|
||||||
|
|
||||||
await loginPage.usernameInput.fill('admin');
|
await loginPage.usernameInput.fill('admin');
|
||||||
await loginPage.passwordInput.fill('Test@123');
|
await loginPage.passwordInput.fill('admin123');
|
||||||
console.log('4. 已填写用户名和密码');
|
console.log('4. 已填写用户名和密码');
|
||||||
|
|
||||||
await page.screenshot({ path: 'test-results/diagnostic/02-filled-form.png', fullPage: true });
|
await page.screenshot({ path: 'test-results/diagnostic/02-filled-form.png', fullPage: true });
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ test.describe('登录表单验证测试', () => {
|
|||||||
|
|
||||||
// 使用fill方法填充
|
// 使用fill方法填充
|
||||||
await page.locator('input[placeholder="请输入用户名"]').fill('admin');
|
await page.locator('input[placeholder="请输入用户名"]').fill('admin');
|
||||||
await page.locator('input[placeholder="请输入密码"]').fill('Test@123');
|
await page.locator('input[placeholder="请输入密码"]').fill('admin123');
|
||||||
|
|
||||||
// 检查input元素的值
|
// 检查input元素的值
|
||||||
const usernameValue = await page.locator('input[placeholder="请输入用户名"]').inputValue();
|
const usernameValue = await page.locator('input[placeholder="请输入用户名"]').inputValue();
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ async function cleanupTestData(): Promise<void> {
|
|||||||
},
|
},
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
username: 'admin',
|
username: 'admin',
|
||||||
password: 'Test@123'
|
password: 'admin123'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
import { test, expect } from '@playwright/test';
|
||||||
|
import { LoginPage } from './pages/LoginPage';
|
||||||
|
import { UserManagementPage } from './pages/UserManagementPage';
|
||||||
|
|
||||||
|
test.describe('集成测试诊断', () => {
|
||||||
|
let loginPage: LoginPage;
|
||||||
|
let userManagementPage: UserManagementPage;
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
loginPage = new LoginPage(page);
|
||||||
|
userManagementPage = new UserManagementPage(page);
|
||||||
|
|
||||||
|
// 确保页面已经导航到正确的URL,避免localStorage访问错误
|
||||||
|
await page.goto('/');
|
||||||
|
await page.waitForLoadState('domcontentloaded');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('测试1: 登录并查询用户列表', async ({ page }) => {
|
||||||
|
console.log('=== 测试1: 登录并查询用户列表 ===');
|
||||||
|
|
||||||
|
await loginPage.goto();
|
||||||
|
await loginPage.login('admin', 'admin123');
|
||||||
|
|
||||||
|
const currentUrl = page.url();
|
||||||
|
console.log('当前URL:', currentUrl);
|
||||||
|
|
||||||
|
const token = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log('Token:', token ? '存在' : '不存在');
|
||||||
|
|
||||||
|
await userManagementPage.goto();
|
||||||
|
await userManagementPage.waitForTableReady();
|
||||||
|
|
||||||
|
const userCount = await userManagementPage.getUserCount();
|
||||||
|
console.log('用户数量:', userCount);
|
||||||
|
|
||||||
|
expect(userCount).toBeGreaterThan(0);
|
||||||
|
console.log('✅ 测试1通过\n');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('测试2: 再次登录并创建用户', async ({ page }) => {
|
||||||
|
console.log('=== 测试2: 再次登录并创建用户 ===');
|
||||||
|
|
||||||
|
// 检查localStorage状态
|
||||||
|
const tokenBefore = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log('测试前Token:', tokenBefore ? '存在' : '不存在');
|
||||||
|
|
||||||
|
await loginPage.goto();
|
||||||
|
console.log('导航到登录页面');
|
||||||
|
|
||||||
|
const urlAfterGoto = page.url();
|
||||||
|
console.log('导航后URL:', urlAfterGoto);
|
||||||
|
|
||||||
|
// 如果已经有token,应该会自动跳转
|
||||||
|
if (tokenBefore) {
|
||||||
|
console.log('检测到已有token,等待自动跳转...');
|
||||||
|
await page.waitForTimeout(3000);
|
||||||
|
const urlAfterWait = page.url();
|
||||||
|
console.log('等待后URL:', urlAfterWait);
|
||||||
|
}
|
||||||
|
|
||||||
|
await loginPage.login('admin', 'admin123');
|
||||||
|
|
||||||
|
const currentUrl = page.url();
|
||||||
|
console.log('登录后URL:', currentUrl);
|
||||||
|
|
||||||
|
const tokenAfter = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log('登录后Token:', tokenAfter ? '存在' : '不存在');
|
||||||
|
|
||||||
|
await userManagementPage.goto();
|
||||||
|
await userManagementPage.waitForTableReady();
|
||||||
|
|
||||||
|
const uuid = Math.random().toString(36).substring(2, 15);
|
||||||
|
const username = `test_${uuid}`;
|
||||||
|
|
||||||
|
await userManagementPage.clickCreateUser();
|
||||||
|
await userManagementPage.fillUserForm({
|
||||||
|
username: username,
|
||||||
|
password: 'admin123',
|
||||||
|
email: `${username}@test.com`,
|
||||||
|
phone: '13800138000',
|
||||||
|
nickname: `测试用户${Date.now()}`
|
||||||
|
});
|
||||||
|
await userManagementPage.submitForm();
|
||||||
|
|
||||||
|
const success = await userManagementPage.waitForSuccessMessage();
|
||||||
|
console.log('创建用户:', success ? '成功' : '失败');
|
||||||
|
|
||||||
|
expect(success).toBeTruthy();
|
||||||
|
console.log('✅ 测试2通过\n');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('测试3: 第三次登录', async ({ page }) => {
|
||||||
|
console.log('=== 测试3: 第三次登录 ===');
|
||||||
|
|
||||||
|
const tokenBefore = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log('测试前Token:', tokenBefore ? '存在' : '不存在');
|
||||||
|
|
||||||
|
await loginPage.goto();
|
||||||
|
await loginPage.login('admin', 'admin123');
|
||||||
|
|
||||||
|
const currentUrl = page.url();
|
||||||
|
console.log('登录后URL:', currentUrl);
|
||||||
|
|
||||||
|
const tokenAfter = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log('登录后Token:', tokenAfter ? '存在' : '不存在');
|
||||||
|
|
||||||
|
expect(currentUrl).not.toContain('/login');
|
||||||
|
console.log('✅ 测试3通过\n');
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
import { test, expect } from '@playwright/test';
|
||||||
|
|
||||||
|
test.describe('登录诊断测试', () => {
|
||||||
|
test('诊断登录流程', async ({ page }) => {
|
||||||
|
console.log('=== 开始诊断登录流程 ===');
|
||||||
|
|
||||||
|
// 导航到登录页面
|
||||||
|
await page.goto('/login');
|
||||||
|
console.log('1. 导航到登录页面');
|
||||||
|
|
||||||
|
// 等待页面加载完成
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
|
console.log('2. 页面加载完成');
|
||||||
|
|
||||||
|
// 监听API响应
|
||||||
|
const [response] = await Promise.all([
|
||||||
|
page.waitForResponse(resp =>
|
||||||
|
resp.url().includes('/api/auth/login') &&
|
||||||
|
resp.request().method() === 'POST',
|
||||||
|
{ timeout: 15000 }
|
||||||
|
).catch(err => {
|
||||||
|
console.log(' ❌ 等待登录API响应超时:', err.message);
|
||||||
|
return null;
|
||||||
|
}),
|
||||||
|
(async () => {
|
||||||
|
// 填写登录表单
|
||||||
|
await page.fill('input[placeholder="请输入用户名"]', 'admin');
|
||||||
|
console.log('3. 填写用户名: admin');
|
||||||
|
|
||||||
|
await page.fill('input[placeholder="请输入密码"]', 'admin123');
|
||||||
|
console.log('4. 填写密码: admin123');
|
||||||
|
|
||||||
|
// 点击登录按钮
|
||||||
|
await page.click('button:has-text("登录")');
|
||||||
|
console.log('5. 点击登录按钮');
|
||||||
|
})()
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (response) {
|
||||||
|
console.log(' ✅ 捕获到登录API响应');
|
||||||
|
console.log(' - 状态码:', response.status());
|
||||||
|
console.log(' - URL:', response.url());
|
||||||
|
|
||||||
|
try {
|
||||||
|
const responseBody = await response.json();
|
||||||
|
console.log(' - 响应体:', JSON.stringify(responseBody, null, 2));
|
||||||
|
|
||||||
|
// 检查响应格式
|
||||||
|
if (responseBody.token) {
|
||||||
|
console.log(' ✅ 响应包含token');
|
||||||
|
} else {
|
||||||
|
console.log(' ❌ 响应不包含token');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseBody.userId) {
|
||||||
|
console.log(' ✅ 响应包含userId:', responseBody.userId);
|
||||||
|
} else {
|
||||||
|
console.log(' ⚠️ 响应不包含userId');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseBody.username) {
|
||||||
|
console.log(' ✅ 响应包含username:', responseBody.username);
|
||||||
|
} else {
|
||||||
|
console.log(' ⚠️ 响应不包含username');
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(' ❌ 无法解析响应体:', err.message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(' ❌ 没有捕获到登录API响应');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 等待一段时间,观察页面变化
|
||||||
|
await page.waitForTimeout(3000);
|
||||||
|
|
||||||
|
// 检查当前URL
|
||||||
|
const currentUrl = page.url();
|
||||||
|
console.log('6. 当前URL:', currentUrl);
|
||||||
|
|
||||||
|
// 检查localStorage中的token
|
||||||
|
const token = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log('7. Token in localStorage:', token ? '✅ 存在' : '❌ 不存在');
|
||||||
|
if (token) {
|
||||||
|
console.log(' - Token前20字符:', token.substring(0, 20));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查localStorage中的userId
|
||||||
|
const userId = await page.evaluate(() => localStorage.getItem('userId'));
|
||||||
|
console.log('8. UserId in localStorage:', userId || '❌ 不存在');
|
||||||
|
|
||||||
|
// 检查localStorage中的username
|
||||||
|
const username = await page.evaluate(() => localStorage.getItem('username'));
|
||||||
|
console.log('9. Username in localStorage:', username || '❌ 不存在');
|
||||||
|
|
||||||
|
// 检查是否有错误消息
|
||||||
|
const errorMessages = await page.locator('.el-message--error').allTextContents();
|
||||||
|
if (errorMessages.length > 0) {
|
||||||
|
console.log(' ⚠️ 发现错误消息:', errorMessages);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查成功消息
|
||||||
|
const successMessages = await page.locator('.el-message--success').allTextContents();
|
||||||
|
if (successMessages.length > 0) {
|
||||||
|
console.log(' ✅ 发现成功消息:', successMessages);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 截图
|
||||||
|
await page.screenshot({ path: `test-results/login-diagnostic-${Date.now()}.png` });
|
||||||
|
console.log('10. 截图已保存');
|
||||||
|
|
||||||
|
console.log('=== 诊断完成 ===');
|
||||||
|
|
||||||
|
// 验证登录是否成功
|
||||||
|
expect(token).toBeTruthy();
|
||||||
|
expect(currentUrl).not.toContain('/login');
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import { test, expect } from '@playwright/test';
|
||||||
|
import { LoginPage } from './pages/LoginPage';
|
||||||
|
|
||||||
|
test.describe('登录稳定性测试', () => {
|
||||||
|
let loginPage: LoginPage;
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
loginPage = new LoginPage(page);
|
||||||
|
|
||||||
|
// 确保页面已经导航到正确的URL,避免localStorage访问错误
|
||||||
|
await page.goto('/');
|
||||||
|
await page.waitForLoadState('domcontentloaded');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 连续执行10次登录测试,验证稳定性
|
||||||
|
for (let i = 1; i <= 10; i++) {
|
||||||
|
test(`登录测试 #${i}`, async ({ page }) => {
|
||||||
|
console.log(`=== 开始登录测试 #${i} ===`);
|
||||||
|
|
||||||
|
await loginPage.goto();
|
||||||
|
await loginPage.login('admin', 'admin123');
|
||||||
|
|
||||||
|
const currentUrl = page.url();
|
||||||
|
console.log(`测试 #${i} - 当前URL:`, currentUrl);
|
||||||
|
|
||||||
|
const token = await page.evaluate(() => localStorage.getItem('token'));
|
||||||
|
console.log(`测试 #${i} - Token:`, token ? '存在' : '不存在');
|
||||||
|
|
||||||
|
expect(currentUrl).not.toContain('/login');
|
||||||
|
expect(token).toBeTruthy();
|
||||||
|
|
||||||
|
console.log(`✅ 测试 #${i} 通过\n`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -19,6 +19,10 @@ test.describe('系统全面集成测试', () => {
|
|||||||
let fileManagementPage: FileManagementPage;
|
let fileManagementPage: FileManagementPage;
|
||||||
|
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
|
// 确保页面已经导航到正确的URL,避免localStorage访问错误
|
||||||
|
await page.goto('/');
|
||||||
|
await page.waitForLoadState('domcontentloaded');
|
||||||
|
|
||||||
loginPage = new LoginPage(page);
|
loginPage = new LoginPage(page);
|
||||||
userManagementPage = new UserManagementPage(page);
|
userManagementPage = new UserManagementPage(page);
|
||||||
roleManagementPage = new RoleManagementPage(page);
|
roleManagementPage = new RoleManagementPage(page);
|
||||||
@@ -32,7 +36,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('1. 用户认证流程测试', () => {
|
test.describe('1. 用户认证流程测试', () => {
|
||||||
test('1.1 正确的用户名和密码登录成功', async ({ page }) => {
|
test('1.1 正确的用户名和密码登录成功', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
|
|
||||||
await expect(page).toHaveURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await expect(page).toHaveURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
await expect(page.locator('.dashboard')).toBeVisible();
|
await expect(page.locator('.dashboard')).toBeVisible();
|
||||||
@@ -52,7 +56,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test('1.3 不存在的用户登录失败', async ({ page }) => {
|
test('1.3 不存在的用户登录失败', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.usernameInput.fill('nonexistent');
|
await loginPage.usernameInput.fill('nonexistent');
|
||||||
await loginPage.passwordInput.fill('Test@123');
|
await loginPage.passwordInput.fill('admin123');
|
||||||
await loginPage.loginButton.click();
|
await loginPage.loginButton.click();
|
||||||
|
|
||||||
await page.waitForTimeout(2000);
|
await page.waitForTimeout(2000);
|
||||||
@@ -63,7 +67,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test('1.4 空用户名或密码登录失败', async ({ page }) => {
|
test('1.4 空用户名或密码登录失败', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.usernameInput.fill('');
|
await loginPage.usernameInput.fill('');
|
||||||
await loginPage.passwordInput.fill('Test@123');
|
await loginPage.passwordInput.fill('admin123');
|
||||||
await loginPage.loginButton.click();
|
await loginPage.loginButton.click();
|
||||||
|
|
||||||
await expect(page.locator('.el-form-item__error')).toBeVisible({ timeout: 5000 });
|
await expect(page.locator('.el-form-item__error')).toBeVisible({ timeout: 5000 });
|
||||||
@@ -72,7 +76,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test('1.5 禁用用户登录失败', async ({ page }) => {
|
test('1.5 禁用用户登录失败', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.usernameInput.fill('disableduser');
|
await loginPage.usernameInput.fill('disableduser');
|
||||||
await loginPage.passwordInput.fill('Test@123');
|
await loginPage.passwordInput.fill('admin123');
|
||||||
await loginPage.loginButton.click();
|
await loginPage.loginButton.click();
|
||||||
|
|
||||||
await page.waitForTimeout(2000);
|
await page.waitForTimeout(2000);
|
||||||
@@ -82,7 +86,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('1.6 登出功能正常', async ({ page }) => {
|
test('1.6 登出功能正常', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
|
|
||||||
await expect(page).toHaveURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await expect(page).toHaveURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
@@ -97,7 +101,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('2. 用户管理流程测试', () => {
|
test.describe('2. 用户管理流程测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -119,7 +123,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.clickCreateUser();
|
await userManagementPage.clickCreateUser();
|
||||||
await userManagementPage.fillUserForm({
|
await userManagementPage.fillUserForm({
|
||||||
username: username,
|
username: username,
|
||||||
password: 'Test@123',
|
password: 'admin123',
|
||||||
email: `${username}@test.com`,
|
email: `${username}@test.com`,
|
||||||
phone: '13800138000',
|
phone: '13800138000',
|
||||||
nickname: `测试用户${Date.now()}`
|
nickname: `测试用户${Date.now()}`
|
||||||
@@ -139,7 +143,9 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
await userManagementPage.waitForTableReady();
|
await userManagementPage.waitForTableReady();
|
||||||
|
|
||||||
await userManagementPage.clickEditButton(1);
|
// 不要编辑admin用户(第1行),否则可能影响后续测试
|
||||||
|
// 编辑第2行的用户
|
||||||
|
await userManagementPage.clickEditButton(2);
|
||||||
|
|
||||||
const newNickname = `更新昵称_${Date.now()}`;
|
const newNickname = `更新昵称_${Date.now()}`;
|
||||||
await userManagementPage.fillNickname(newNickname);
|
await userManagementPage.fillNickname(newNickname);
|
||||||
@@ -157,7 +163,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.clickCreateUser();
|
await userManagementPage.clickCreateUser();
|
||||||
await userManagementPage.fillUserForm({
|
await userManagementPage.fillUserForm({
|
||||||
username: username,
|
username: username,
|
||||||
password: 'Test@123',
|
password: 'admin123',
|
||||||
email: `${username}@test.com`,
|
email: `${username}@test.com`,
|
||||||
phone: '13800138000',
|
phone: '13800138000',
|
||||||
nickname: `待删除用户${Date.now()}`
|
nickname: `待删除用户${Date.now()}`
|
||||||
@@ -180,7 +186,9 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
await userManagementPage.waitForTableReady();
|
await userManagementPage.waitForTableReady();
|
||||||
|
|
||||||
await userManagementPage.clickEditButton(1);
|
// 不要编辑admin用户(第1行),否则可能影响后续测试
|
||||||
|
// 编辑第2行的用户
|
||||||
|
await userManagementPage.clickEditButton(2);
|
||||||
await userManagementPage.selectRole('管理员');
|
await userManagementPage.selectRole('管理员');
|
||||||
await userManagementPage.submitForm();
|
await userManagementPage.submitForm();
|
||||||
|
|
||||||
@@ -192,7 +200,9 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
await userManagementPage.waitForTableReady();
|
await userManagementPage.waitForTableReady();
|
||||||
|
|
||||||
await userManagementPage.clickStatusButton(1);
|
// 不要禁用admin用户(第1行)和testadmin用户(第2行),否则后续测试无法登录
|
||||||
|
// 使用第3行的用户进行测试
|
||||||
|
await userManagementPage.clickStatusButton(3);
|
||||||
|
|
||||||
const success = await userManagementPage.waitForSuccessMessage();
|
const success = await userManagementPage.waitForSuccessMessage();
|
||||||
expect(success).toBeTruthy();
|
expect(success).toBeTruthy();
|
||||||
@@ -202,7 +212,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('3. 角色管理流程测试', () => {
|
test.describe('3. 角色管理流程测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -303,7 +313,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('4. 菜单管理流程测试', () => {
|
test.describe('4. 菜单管理流程测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -376,7 +386,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('5. 权限验证测试', () => {
|
test.describe('5. 权限验证测试', () => {
|
||||||
test('5.1 管理员可以访问所有功能', async ({ page }) => {
|
test('5.1 管理员可以访问所有功能', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
@@ -391,7 +401,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('5.2 普通用户只能访问授权功能', async ({ page }) => {
|
test('5.2 普通用户只能访问授权功能', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('normaluser', 'Test@123');
|
await loginPage.login('normaluser', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await page.goto('/user-management');
|
await page.goto('/user-management');
|
||||||
@@ -413,7 +423,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('6. 操作日志测试', () => {
|
test.describe('6. 操作日志测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -461,7 +471,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('7. 字典管理测试', () => {
|
test.describe('7. 字典管理测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -517,7 +527,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('8. 系统配置测试', () => {
|
test.describe('8. 系统配置测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -569,7 +579,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('9. 文件管理测试', () => {
|
test.describe('9. 文件管理测试', () => {
|
||||||
test.beforeEach(async ({ page }) => {
|
test.beforeEach(async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -631,7 +641,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('10. 异常场景测试', () => {
|
test.describe('10. 异常场景测试', () => {
|
||||||
test('10.1 网络错误处理', async ({ page }) => {
|
test('10.1 网络错误处理', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await page.route('**/api/**', route => route.abort('failed'));
|
await page.route('**/api/**', route => route.abort('failed'));
|
||||||
@@ -643,13 +653,13 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('10.2 并发操作处理', async ({ page, context }) => {
|
test('10.2 并发操作处理', async ({ page, context }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const page2 = await context.newPage();
|
const page2 = await context.newPage();
|
||||||
const loginPage2 = new LoginPage(page2);
|
const loginPage2 = new LoginPage(page2);
|
||||||
await loginPage2.goto();
|
await loginPage2.goto();
|
||||||
await loginPage2.login('admin', 'Test@123');
|
await loginPage2.login('admin', 'admin123');
|
||||||
await page2.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page2.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
@@ -663,7 +673,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('10.3 数据验证错误', async ({ page }) => {
|
test('10.3 数据验证错误', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
@@ -682,7 +692,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('10.4 会话超时处理', async ({ page }) => {
|
test('10.4 会话超时处理', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
@@ -697,7 +707,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('10.5 权限不足操作', async ({ page }) => {
|
test('10.5 权限不足操作', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('normaluser', 'Test@123');
|
await loginPage.login('normaluser', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const response = await page.request.post('/api/users', {
|
const response = await page.request.post('/api/users', {
|
||||||
@@ -716,7 +726,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
|
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const loadTime = Date.now() - startTime;
|
const loadTime = Date.now() - startTime;
|
||||||
@@ -726,7 +736,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('11.2 大数据量查询性能', async ({ page }) => {
|
test('11.2 大数据量查询性能', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
@@ -741,7 +751,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('11.3 并发请求处理', async ({ page }) => {
|
test('11.3 并发请求处理', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const requests = Array(10).fill(null).map(() =>
|
const requests = Array(10).fill(null).map(() =>
|
||||||
@@ -759,7 +769,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
test.describe('12. 数据一致性测试', () => {
|
test.describe('12. 数据一致性测试', () => {
|
||||||
test('12.1 创建后立即查询数据一致性', async ({ page }) => {
|
test('12.1 创建后立即查询数据一致性', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const timestamp = Date.now();
|
const timestamp = Date.now();
|
||||||
@@ -769,7 +779,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.clickCreateUser();
|
await userManagementPage.clickCreateUser();
|
||||||
await userManagementPage.fillUserForm({
|
await userManagementPage.fillUserForm({
|
||||||
username: username,
|
username: username,
|
||||||
password: 'Test@123',
|
password: 'admin123',
|
||||||
email: `${username}@test.com`,
|
email: `${username}@test.com`,
|
||||||
phone: '13800138000',
|
phone: '13800138000',
|
||||||
nickname: `一致性测试用户${timestamp}`
|
nickname: `一致性测试用户${timestamp}`
|
||||||
@@ -788,7 +798,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('12.2 更新后数据一致性', async ({ page }) => {
|
test('12.2 更新后数据一致性', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
await userManagementPage.goto();
|
await userManagementPage.goto();
|
||||||
@@ -814,7 +824,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
|
|
||||||
test('12.3 删除后数据不可见', async ({ page }) => {
|
test('12.3 删除后数据不可见', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
await page.waitForURL(/\/(dashboard|\/)$/, { timeout: 10000 });
|
||||||
|
|
||||||
const timestamp = Date.now();
|
const timestamp = Date.now();
|
||||||
@@ -824,7 +834,7 @@ test.describe('系统全面集成测试', () => {
|
|||||||
await userManagementPage.clickCreateUser();
|
await userManagementPage.clickCreateUser();
|
||||||
await userManagementPage.fillUserForm({
|
await userManagementPage.fillUserForm({
|
||||||
username: username,
|
username: username,
|
||||||
password: 'Test@123',
|
password: 'admin123',
|
||||||
email: `${username}@test.com`,
|
email: `${username}@test.com`,
|
||||||
phone: '13800138000',
|
phone: '13800138000',
|
||||||
nickname: `删除测试用户${timestamp}`
|
nickname: `删除测试用户${timestamp}`
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ test.describe('用户创建诊断测试', () => {
|
|||||||
|
|
||||||
// 登录
|
// 登录
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
console.log('1. 登录成功');
|
console.log('1. 登录成功');
|
||||||
|
|
||||||
// 导航到用户管理页面
|
// 导航到用户管理页面
|
||||||
@@ -33,7 +33,7 @@ test.describe('用户创建诊断测试', () => {
|
|||||||
const username = `diag_${uuid}`;
|
const username = `diag_${uuid}`;
|
||||||
const userData = {
|
const userData = {
|
||||||
username: username,
|
username: username,
|
||||||
password: 'Test@123',
|
password: 'admin123',
|
||||||
email: `${username}@test.com`,
|
email: `${username}@test.com`,
|
||||||
phone: '13800138000',
|
phone: '13800138000',
|
||||||
nickname: `诊断用户${Date.now()}`
|
nickname: `诊断用户${Date.now()}`
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ test.describe('用户创建诊断测试', () => {
|
|||||||
|
|
||||||
test('诊断用户创建流程', async ({ page }) => {
|
test('诊断用户创建流程', async ({ page }) => {
|
||||||
await loginPage.goto();
|
await loginPage.goto();
|
||||||
await loginPage.login('admin', 'Test@123');
|
await loginPage.login('admin', 'admin123');
|
||||||
console.log('=== 开始诊断用户创建流程 ===');
|
console.log('=== 开始诊断用户创建流程 ===');
|
||||||
|
|
||||||
await page.goto('/users');
|
await page.goto('/users');
|
||||||
@@ -27,7 +27,7 @@ test.describe('用户创建诊断测试', () => {
|
|||||||
const timestamp = Date.now();
|
const timestamp = Date.now();
|
||||||
const userData = {
|
const userData = {
|
||||||
username: `testuser_${timestamp}`,
|
username: `testuser_${timestamp}`,
|
||||||
password: 'Test@123',
|
password: 'admin123',
|
||||||
email: `testuser_${timestamp}@test.com`,
|
email: `testuser_${timestamp}@test.com`,
|
||||||
phone: '13800138000',
|
phone: '13800138000',
|
||||||
nickname: `测试用户${timestamp}`
|
nickname: `测试用户${timestamp}`
|
||||||
|
|||||||
Reference in New Issue
Block a user