08ea5fbe98
添加用户管理视图、API和状态管理文件
317 lines
11 KiB
TypeScript
317 lines
11 KiB
TypeScript
import { test, expect } from '../fixtures/test-fixtures';
|
|
|
|
test.describe('API集成测试', () => {
|
|
test.beforeEach(async ({ apiHelper, testLogger }) => {
|
|
testLogger.startTest('API集成测试');
|
|
await apiHelper.login('admin', 'admin123');
|
|
});
|
|
|
|
test.afterEach(async ({ apiHelper, testLogger }) => {
|
|
await apiHelper.logout();
|
|
testLogger.endTest('API集成测试', 'passed');
|
|
});
|
|
|
|
test('TC-API-001: 用户CRUD操作', async ({ apiHelper, assertionHelper, testLogger }) => {
|
|
testLogger.startStep('步骤1: 创建用户');
|
|
|
|
const userData = {
|
|
username: `api_test_${Date.now()}`,
|
|
password: 'Test@123456',
|
|
realName: 'API测试用户',
|
|
email: `api_test_${Date.now()}@example.com`,
|
|
phone: '13800138000',
|
|
status: 1,
|
|
gender: 1
|
|
};
|
|
|
|
const createResponse = await apiHelper.post('/api/sys/user', userData);
|
|
await assertionHelper.assertAPISuccess(createResponse, '创建用户API应该返回成功');
|
|
|
|
const createdUser = await createResponse.json();
|
|
const userId = createdUser.data?.id || createdUser.id;
|
|
|
|
testLogger.endStep('步骤1: 创建用户', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 查询用户');
|
|
|
|
const getResponse = await apiHelper.get(`/api/sys/user/${userId}`);
|
|
await assertionHelper.assertAPISuccess(getResponse, '查询用户API应该返回成功');
|
|
|
|
const getUser = await getResponse.json();
|
|
expect(getUser.data?.username).toBe(userData.username);
|
|
|
|
testLogger.endStep('步骤2: 查询用户', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 更新用户');
|
|
|
|
const updateData = {
|
|
id: userId,
|
|
realName: '更新后的用户名',
|
|
email: `updated_${Date.now()}@example.com`
|
|
};
|
|
|
|
const updateResponse = await apiHelper.put('/api/sys/user', updateData);
|
|
await assertionHelper.assertAPISuccess(updateResponse, '更新用户API应该返回成功');
|
|
|
|
testLogger.endStep('步骤3: 更新用户', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 验证更新');
|
|
|
|
const verifyResponse = await apiHelper.get(`/api/sys/user/${userId}`);
|
|
const verifyUser = await verifyResponse.json();
|
|
expect(verifyUser.data?.realName).toBe(updateData.realName);
|
|
expect(verifyUser.data?.email).toBe(updateData.email);
|
|
|
|
testLogger.endStep('步骤4: 验证更新', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 删除用户');
|
|
|
|
const deleteResponse = await apiHelper.delete(`/api/sys/user/${userId}`);
|
|
await assertionHelper.assertAPISuccess(deleteResponse, '删除用户API应该返回成功');
|
|
|
|
testLogger.endStep('步骤5: 删除用户', 'passed');
|
|
|
|
testLogger.startStep('步骤6: 验证删除');
|
|
|
|
const verifyDeleteResponse = await apiHelper.get(`/api/sys/user/${userId}`);
|
|
expect(verifyDeleteResponse.status()).toBe(404);
|
|
|
|
testLogger.endStep('步骤6: 验证删除', 'passed');
|
|
});
|
|
|
|
test('TC-API-002: 角色CRUD操作', async ({ apiHelper, assertionHelper, testLogger }) => {
|
|
testLogger.startStep('步骤1: 创建角色');
|
|
|
|
const roleData = {
|
|
roleName: `API测试角色_${Date.now()}`,
|
|
roleCode: `api_test_role_${Date.now()}`,
|
|
description: 'API测试角色描述',
|
|
status: 1
|
|
};
|
|
|
|
const createResponse = await apiHelper.post('/api/sys/role', roleData);
|
|
await assertionHelper.assertAPISuccess(createResponse, '创建角色API应该返回成功');
|
|
|
|
const createdRole = await createResponse.json();
|
|
const roleId = createdRole.data?.id || createdRole.id;
|
|
|
|
testLogger.endStep('步骤1: 创建角色', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 查询角色列表');
|
|
|
|
const listResponse = await apiHelper.get('/api/sys/role/list');
|
|
await assertionHelper.assertAPISuccess(listResponse, '查询角色列表API应该返回成功');
|
|
|
|
const roleList = await listResponse.json();
|
|
expect(roleList.data?.length).toBeGreaterThan(0);
|
|
|
|
testLogger.endStep('步骤2: 查询角色列表', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 查询单个角色');
|
|
|
|
const getResponse = await apiHelper.get(`/api/sys/role/${roleId}`);
|
|
await assertionHelper.assertAPISuccess(getResponse, '查询角色API应该返回成功');
|
|
|
|
const getRole = await getResponse.json();
|
|
expect(getRole.data?.roleName).toBe(roleData.roleName);
|
|
|
|
testLogger.endStep('步骤3: 查询单个角色', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 更新角色');
|
|
|
|
const updateData = {
|
|
id: roleId,
|
|
roleName: '更新后的角色名',
|
|
description: '更新后的角色描述'
|
|
};
|
|
|
|
const updateResponse = await apiHelper.put('/api/sys/role', updateData);
|
|
await assertionHelper.assertAPISuccess(updateResponse, '更新角色API应该返回成功');
|
|
|
|
testLogger.endStep('步骤4: 更新角色', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 删除角色');
|
|
|
|
const deleteResponse = await apiHelper.delete(`/api/sys/role/${roleId}`);
|
|
await assertionHelper.assertAPISuccess(deleteResponse, '删除角色API应该返回成功');
|
|
|
|
testLogger.endStep('步骤5: 删除角色', 'passed');
|
|
});
|
|
|
|
test('TC-API-003: 菜单CRUD操作', async ({ apiHelper, assertionHelper, testLogger }) => {
|
|
testLogger.startStep('步骤1: 创建菜单');
|
|
|
|
const menuData = {
|
|
name: `API测试菜单_${Date.now()}`,
|
|
code: `api_test_menu_${Date.now()}`,
|
|
path: `/api-test-menu-${Date.now()}`,
|
|
icon: 'SettingOutlined',
|
|
sortOrder: 10,
|
|
status: 1,
|
|
parentId: 0
|
|
};
|
|
|
|
const createResponse = await apiHelper.post('/api/sys/menu', menuData);
|
|
await assertionHelper.assertAPISuccess(createResponse, '创建菜单API应该返回成功');
|
|
|
|
const createdMenu = await createResponse.json();
|
|
const menuId = createdMenu.data?.id || createdMenu.id;
|
|
|
|
testLogger.endStep('步骤1: 创建菜单', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 查询菜单树');
|
|
|
|
const treeResponse = await apiHelper.get('/api/sys/menu/tree');
|
|
await assertionHelper.assertAPISuccess(treeResponse, '查询菜单树API应该返回成功');
|
|
|
|
const menuTree = await treeResponse.json();
|
|
expect(menuTree.data?.length).toBeGreaterThan(0);
|
|
|
|
testLogger.endStep('步骤2: 查询菜单树', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 查询单个菜单');
|
|
|
|
const getResponse = await apiHelper.get(`/api/sys/menu/${menuId}`);
|
|
await assertionHelper.assertAPISuccess(getResponse, '查询菜单API应该返回成功');
|
|
|
|
const getMenu = await getResponse.json();
|
|
expect(getMenu.data?.name).toBe(menuData.name);
|
|
|
|
testLogger.endStep('步骤3: 查询单个菜单', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 更新菜单');
|
|
|
|
const updateData = {
|
|
id: menuId,
|
|
name: '更新后的菜单名',
|
|
icon: 'EditOutlined'
|
|
};
|
|
|
|
const updateResponse = await apiHelper.put('/api/sys/menu', updateData);
|
|
await assertionHelper.assertAPISuccess(updateResponse, '更新菜单API应该返回成功');
|
|
|
|
testLogger.endStep('步骤4: 更新菜单', 'passed');
|
|
|
|
testLogger.startStep('步骤5: 删除菜单');
|
|
|
|
const deleteResponse = await apiHelper.delete(`/api/sys/menu/${menuId}`);
|
|
await assertionHelper.assertAPISuccess(deleteResponse, '删除菜单API应该返回成功');
|
|
|
|
testLogger.endStep('步骤5: 删除菜单', 'passed');
|
|
});
|
|
|
|
test('TC-API-004: 分页查询用户', async ({ apiHelper, assertionHelper, testLogger }) => {
|
|
testLogger.startStep('步骤1: 创建多个测试用户');
|
|
|
|
const users = [];
|
|
for (let i = 0; i < 5; i++) {
|
|
const userData = {
|
|
username: `pagination_test_${Date.now()}_${i}`,
|
|
password: 'Test@123456',
|
|
realName: `分页测试用户${i}`,
|
|
email: `pagination_test_${i}@example.com`,
|
|
phone: '13800138000',
|
|
status: 1,
|
|
gender: 1
|
|
};
|
|
|
|
const createResponse = await apiHelper.post('/api/sys/user', userData);
|
|
const createdUser = await createResponse.json();
|
|
users.push(createdUser.data?.id || createdUser.id);
|
|
}
|
|
|
|
testLogger.endStep('步骤1: 创建多个测试用户', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 分页查询用户');
|
|
|
|
const page1Response = await apiHelper.get('/api/sys/user/page', {
|
|
current: 1,
|
|
size: 2
|
|
});
|
|
|
|
await assertionHelper.assertAPISuccess(page1Response, '分页查询API应该返回成功');
|
|
|
|
const page1Data = await page1Response.json();
|
|
expect(page1Data.data?.records?.length).toBeLessThanOrEqual(2);
|
|
expect(page1Data.data?.total).toBeGreaterThanOrEqual(5);
|
|
|
|
testLogger.endStep('步骤2: 分页查询用户', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 查询第二页');
|
|
|
|
const page2Response = await apiHelper.get('/api/sys/user/page', {
|
|
current: 2,
|
|
size: 2
|
|
});
|
|
|
|
await assertionHelper.assertAPISuccess(page2Response, '分页查询API应该返回成功');
|
|
|
|
const page2Data = await page2Response.json();
|
|
expect(page2Data.data?.records?.length).toBeLessThanOrEqual(2);
|
|
|
|
testLogger.endStep('步骤3: 查询第二页', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 清理测试数据');
|
|
|
|
for (const userId of users) {
|
|
await apiHelper.delete(`/api/sys/user/${userId}`);
|
|
}
|
|
|
|
testLogger.endStep('步骤4: 清理测试数据', 'passed');
|
|
});
|
|
|
|
test('TC-API-005: 用户搜索功能', async ({ apiHelper, assertionHelper, testLogger }) => {
|
|
testLogger.startStep('步骤1: 创建测试用户');
|
|
|
|
const userData = {
|
|
username: `search_test_${Date.now()}`,
|
|
password: 'Test@123456',
|
|
realName: '搜索测试用户',
|
|
email: 'search_test@example.com',
|
|
phone: '13800138000',
|
|
status: 1,
|
|
gender: 1
|
|
};
|
|
|
|
const createResponse = await apiHelper.post('/api/sys/user', userData);
|
|
const createdUser = await createResponse.json();
|
|
const userId = createdUser.data?.id || createdUser.id;
|
|
|
|
testLogger.endStep('步骤1: 创建测试用户', 'passed');
|
|
|
|
testLogger.startStep('步骤2: 按用户名搜索');
|
|
|
|
const searchResponse = await apiHelper.get('/api/sys/user/page', {
|
|
username: userData.username
|
|
});
|
|
|
|
await assertionHelper.assertAPISuccess(searchResponse, '搜索API应该返回成功');
|
|
|
|
const searchData = await searchResponse.json();
|
|
expect(searchData.data?.records?.length).toBeGreaterThan(0);
|
|
expect(searchData.data?.records?.[0]?.username).toBe(userData.username);
|
|
|
|
testLogger.endStep('步骤2: 按用户名搜索', 'passed');
|
|
|
|
testLogger.startStep('步骤3: 按真实姓名搜索');
|
|
|
|
const searchByNameResponse = await apiHelper.get('/api/sys/user/page', {
|
|
realName: userData.realName
|
|
});
|
|
|
|
await assertionHelper.assertAPISuccess(searchByNameResponse, '按姓名搜索API应该返回成功');
|
|
|
|
const searchByNameData = await searchByNameResponse.json();
|
|
expect(searchByNameData.data?.records?.length).toBeGreaterThan(0);
|
|
expect(searchByNameData.data?.records?.[0]?.realName).toBe(userData.realName);
|
|
|
|
testLogger.endStep('步骤3: 按真实姓名搜索', 'passed');
|
|
|
|
testLogger.startStep('步骤4: 清理测试数据');
|
|
|
|
await apiHelper.delete(`/api/sys/user/${userId}`);
|
|
|
|
testLogger.endStep('步骤4: 清理测试数据', 'passed');
|
|
});
|
|
});
|