08ea5fbe98
添加用户管理视图、API和状态管理文件
342 lines
12 KiB
TypeScript
342 lines
12 KiB
TypeScript
import { test, expect } from './test-fixtures.js';
|
|
|
|
/**
|
|
* 用户管理模块完整测试套件
|
|
* 采用TDD方法:Red -> Green -> Refactor
|
|
* 测试覆盖:CRUD操作、搜索、分页、表单验证
|
|
*/
|
|
|
|
test.describe('用户管理 - 列表功能', () => {
|
|
test.beforeEach(async ({ pageObjects, testData, testLogger }) => {
|
|
testLogger.info('开始用户管理列表测试套件');
|
|
await pageObjects.loginPage.navigate();
|
|
await pageObjects.loginPage.login(testData.admin.username, testData.admin.password);
|
|
await pageObjects.dashboardPage.waitForLoad();
|
|
await pageObjects.userManagementPage.navigate();
|
|
await pageObjects.userManagementPage.waitForLoad();
|
|
});
|
|
|
|
test.afterEach(async ({ testLogger, helpers }) => {
|
|
testLogger.info('用户管理列表测试用例完成');
|
|
await helpers.screenshot.takeScreenshot('after-user-list-test');
|
|
});
|
|
|
|
test('应该显示用户列表页面', async ({ pageObjects, testLogger }) => {
|
|
testLogger.startTest('用户列表页面显示');
|
|
|
|
try {
|
|
const userCount = await pageObjects.userManagementPage.getUserCount();
|
|
expect(userCount).toBeGreaterThanOrEqual(0);
|
|
|
|
testLogger.endTest('用户列表页面显示', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('用户列表页面显示', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('应该能够搜索用户', async ({ pageObjects, testData, testLogger }) => {
|
|
testLogger.startTest('搜索用户功能');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.searchUser(testData.admin.username);
|
|
|
|
const userCount = await pageObjects.userManagementPage.getUserCount();
|
|
expect(userCount).toBeGreaterThanOrEqual(0);
|
|
|
|
testLogger.endTest('搜索用户功能', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('搜索用户功能', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('应该能够重置搜索条件', async ({ pageObjects, testLogger }) => {
|
|
testLogger.startTest('重置搜索条件');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.resetSearch();
|
|
|
|
const userCount = await pageObjects.userManagementPage.getUserCount();
|
|
expect(userCount).toBeGreaterThanOrEqual(0);
|
|
|
|
testLogger.endTest('重置搜索条件', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('重置搜索条件', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
});
|
|
|
|
test.describe('用户管理 - 创建用户', () => {
|
|
test.beforeEach(async ({ pageObjects, testData, testLogger }) => {
|
|
testLogger.info('开始创建用户测试套件');
|
|
await pageObjects.loginPage.navigate();
|
|
await pageObjects.loginPage.login(testData.admin.username, testData.admin.password);
|
|
await pageObjects.dashboardPage.waitForLoad();
|
|
await pageObjects.userManagementPage.navigate();
|
|
await pageObjects.userManagementPage.waitForLoad();
|
|
});
|
|
|
|
test('应该成功创建新用户', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('创建新用户');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.clickAddUser();
|
|
|
|
await helpers.form.fillForm({
|
|
username: testData.user.username,
|
|
password: testData.user.password,
|
|
email: testData.user.email,
|
|
phone: testData.user.phone,
|
|
realName: testData.user.realName,
|
|
status: testData.user.status
|
|
});
|
|
|
|
await helpers.form.submitForm();
|
|
|
|
const successMessage = await pageObjects.userManagementPage.getSuccessMessage();
|
|
expect(successMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('创建新用户', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('创建新用户', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('应该验证用户名不能为空', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('用户名空值验证');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.clickAddUser();
|
|
|
|
await helpers.form.fillForm({
|
|
password: testData.user.password,
|
|
email: testData.user.email,
|
|
phone: testData.user.phone,
|
|
realName: testData.user.realName
|
|
});
|
|
|
|
await helpers.form.submitForm();
|
|
|
|
const errorMessage = await pageObjects.userManagementPage.getErrorMessage();
|
|
expect(errorMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('用户名空值验证', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('用户名空值验证', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('应该验证密码不能为空', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('密码空值验证');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.clickAddUser();
|
|
|
|
await helpers.form.fillForm({
|
|
username: testData.user.username,
|
|
email: testData.user.email,
|
|
phone: testData.user.phone,
|
|
realName: testData.user.realName
|
|
});
|
|
|
|
await helpers.form.submitForm();
|
|
|
|
const errorMessage = await pageObjects.userManagementPage.getErrorMessage();
|
|
expect(errorMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('密码空值验证', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('密码空值验证', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('应该验证邮箱格式', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('邮箱格式验证');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.clickAddUser();
|
|
|
|
await helpers.form.fillForm({
|
|
username: testData.user.username,
|
|
password: testData.user.password,
|
|
email: 'invalid-email',
|
|
phone: testData.user.phone,
|
|
realName: testData.user.realName
|
|
});
|
|
|
|
await helpers.form.submitForm();
|
|
|
|
const errorMessage = await pageObjects.userManagementPage.getErrorMessage();
|
|
expect(errorMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('邮箱格式验证', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('邮箱格式验证', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('应该验证手机号格式', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('手机号格式验证');
|
|
|
|
try {
|
|
await pageObjects.userManagementPage.clickAddUser();
|
|
|
|
await helpers.form.fillForm({
|
|
username: testData.user.username,
|
|
password: testData.user.password,
|
|
email: testData.user.email,
|
|
phone: 'invalid-phone',
|
|
realName: testData.user.realName
|
|
});
|
|
|
|
await helpers.form.submitForm();
|
|
|
|
const errorMessage = await pageObjects.userManagementPage.getErrorMessage();
|
|
expect(errorMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('手机号格式验证', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('手机号格式验证', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
});
|
|
|
|
test.describe('用户管理 - 编辑用户', () => {
|
|
test.beforeEach(async ({ pageObjects, testData, testLogger }) => {
|
|
testLogger.info('开始编辑用户测试套件');
|
|
await pageObjects.loginPage.navigate();
|
|
await pageObjects.loginPage.login(testData.admin.username, testData.admin.password);
|
|
await pageObjects.dashboardPage.waitForLoad();
|
|
await pageObjects.userManagementPage.navigate();
|
|
await pageObjects.userManagementPage.waitForLoad();
|
|
});
|
|
|
|
test('应该成功编辑用户信息', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('编辑用户信息');
|
|
|
|
try {
|
|
// 先搜索用户
|
|
await pageObjects.userManagementPage.searchUser(testData.user.username);
|
|
|
|
// 点击编辑按钮(第一行)
|
|
await pageObjects.userManagementPage.clickEditUser(0);
|
|
|
|
// 修改邮箱
|
|
const updatedEmail = 'updated@example.com';
|
|
await helpers.form.fillField('input[type="email"]', updatedEmail);
|
|
|
|
await helpers.form.submitForm();
|
|
|
|
const successMessage = await pageObjects.userManagementPage.getSuccessMessage();
|
|
expect(successMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('编辑用户信息', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('编辑用户信息', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
});
|
|
|
|
test.describe('用户管理 - 删除用户', () => {
|
|
test.beforeEach(async ({ pageObjects, testData, testLogger }) => {
|
|
testLogger.info('开始删除用户测试套件');
|
|
await pageObjects.loginPage.navigate();
|
|
await pageObjects.loginPage.login(testData.admin.username, testData.admin.password);
|
|
await pageObjects.dashboardPage.waitForLoad();
|
|
await pageObjects.userManagementPage.navigate();
|
|
await pageObjects.userManagementPage.waitForLoad();
|
|
});
|
|
|
|
test('应该成功删除用户', async ({ pageObjects, testData, testLogger }) => {
|
|
testLogger.startTest('删除用户');
|
|
|
|
try {
|
|
// 先搜索用户
|
|
await pageObjects.userManagementPage.searchUser(testData.user.username);
|
|
|
|
// 点击删除按钮(第一行)
|
|
await pageObjects.userManagementPage.clickDeleteUser(0);
|
|
|
|
// 确认删除
|
|
await pageObjects.userManagementPage.confirmDelete();
|
|
|
|
const successMessage = await pageObjects.userManagementPage.getSuccessMessage();
|
|
expect(successMessage).toBeTruthy();
|
|
|
|
testLogger.endTest('删除用户', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('删除用户', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
});
|
|
|
|
test.describe('用户管理 - 端到端流程', () => {
|
|
test('应该完成完整的用户CRUD流程', async ({ pageObjects, testData, testLogger, helpers }) => {
|
|
testLogger.startTest('完整用户CRUD流程');
|
|
|
|
try {
|
|
// 步骤1: 登录
|
|
testLogger.startStep('用户登录');
|
|
await pageObjects.loginPage.navigate();
|
|
await pageObjects.loginPage.login(testData.admin.username, testData.admin.password);
|
|
await pageObjects.dashboardPage.waitForLoad();
|
|
testLogger.endStep('用户登录', 'passed');
|
|
|
|
// 步骤2: 导航到用户管理
|
|
testLogger.startStep('导航到用户管理');
|
|
await pageObjects.userManagementPage.navigate();
|
|
await pageObjects.userManagementPage.waitForLoad();
|
|
testLogger.endStep('导航到用户管理', 'passed');
|
|
|
|
// 步骤3: 创建用户
|
|
testLogger.startStep('创建新用户');
|
|
await pageObjects.userManagementPage.clickAddUser();
|
|
await helpers.form.fillForm({
|
|
username: testData.user.username,
|
|
password: testData.user.password,
|
|
email: testData.user.email,
|
|
phone: testData.user.phone,
|
|
realName: testData.user.realName,
|
|
status: testData.user.status
|
|
});
|
|
await helpers.form.submitForm();
|
|
testLogger.endStep('创建新用户', 'passed');
|
|
|
|
// 步骤4: 搜索用户
|
|
testLogger.startStep('搜索用户');
|
|
await pageObjects.userManagementPage.searchUser(testData.user.username);
|
|
const userCount = await pageObjects.userManagementPage.getUserCount();
|
|
expect(userCount).toBeGreaterThan(0);
|
|
testLogger.endStep('搜索用户', 'passed');
|
|
|
|
// 步骤5: 编辑用户
|
|
testLogger.startStep('编辑用户');
|
|
await pageObjects.userManagementPage.clickEditUser(0);
|
|
await helpers.form.fillField('input[type="email"]', 'updated@example.com');
|
|
await helpers.form.submitForm();
|
|
testLogger.endStep('编辑用户', 'passed');
|
|
|
|
// 步骤6: 删除用户
|
|
testLogger.startStep('删除用户');
|
|
await pageObjects.userManagementPage.searchUser(testData.user.username);
|
|
await pageObjects.userManagementPage.clickDeleteUser(0);
|
|
await pageObjects.userManagementPage.confirmDelete();
|
|
testLogger.endStep('删除用户', 'passed');
|
|
|
|
testLogger.endTest('完整用户CRUD流程', 'passed');
|
|
} catch (error) {
|
|
testLogger.endTest('完整用户CRUD流程', 'failed', error as Error);
|
|
throw error;
|
|
}
|
|
});
|
|
});
|