| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- const axios = require('axios');
- const colors = require('colors');
- // 测试配置
- const BASE_URL = 'http://localhost/dev-api';
- // 获取Token
- async function getToken() {
- try {
- const { getToken } = require('./quick-token-getter');
- return await getToken();
- } catch (error) {
- console.log('获取Token失败'.red, error.message);
- return null;
- }
- }
- // 通用API测试方法
- async function testAPI(endpoint, method = 'GET', data = null, token = null, description = '') {
- try {
- const config = {
- method: method.toLowerCase(),
- url: `${BASE_URL}${endpoint}`,
- headers: {
- 'Content-Type': 'application/json;charset=utf-8',
- clientid: 'e5cd7e4891bf95d1d19206ce24a7b32e',
- 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
- referer: 'http://localhost/login?redirect=%252Findex',
- },
- timeout: 10000,
- };
- if (token) {
- config.headers['Authorization'] = `Bearer ${token}`;
- }
- if (data && (method.toUpperCase() === 'POST' || method.toUpperCase() === 'PUT')) {
- config.data = data;
- } else if (data && method.toUpperCase() === 'GET') {
- config.params = data;
- }
- const response = await axios(config);
- return {
- success: true,
- data: response.data,
- status: response.status,
- description: description,
- };
- } catch (error) {
- return {
- success: false,
- error: error.response?.data || error.message,
- status: error.response?.status,
- description: description,
- };
- }
- }
- // 测试所有权限接口
- async function testAllPermissionAPIs(token) {
- console.log('\n🧪 测试物业报修管理权限接口'.blue.bold);
- console.log('='.repeat(80).blue);
- // 定义所有需要测试的接口
- const apiTests = [
- // 报修管理接口
- {
- endpoint: '/pm/repairOrder/list',
- method: 'GET',
- permission: 'pm:repairOrder:list',
- description: '报修工单列表查询',
- data: { pageNum: 1, pageSize: 10 },
- },
- {
- endpoint: '/pm/repairOrder/statistics',
- method: 'GET',
- permission: 'pm:repairOrder:statistics',
- description: '报修统计数据',
- },
- {
- endpoint: '/pm/repairOrder/generateOrderNo',
- method: 'GET',
- permission: 'pm:repairOrder:generateOrderNo',
- description: '生成工单编号',
- },
- // 维修分类接口
- {
- endpoint: '/pm/repairCategory/list',
- method: 'GET',
- permission: 'pm:category:list',
- description: '维修分类列表查询',
- data: { pageNum: 1, pageSize: 10 },
- },
- {
- endpoint: '/pm/repairCategory/tree',
- method: 'GET',
- permission: 'pm:category:tree',
- description: '维修分类树形结构',
- },
- {
- endpoint: '/pm/repairCategory/options',
- method: 'GET',
- permission: 'pm:category:options',
- description: '维修分类下拉选项',
- },
- ];
- const results = [];
- for (let i = 0; i < apiTests.length; i++) {
- const test = apiTests[i];
- console.log(`\n${i + 1}. 测试接口: ${test.endpoint}`.cyan);
- console.log(` 权限要求: ${test.permission}`.gray);
- console.log(` 功能描述: ${test.description}`.gray);
- const result = await testAPI(
- test.endpoint,
- test.method,
- test.data,
- token,
- test.description,
- );
- if (result.success) {
- console.log(` ✅ 成功 - 状态: ${result.status}`.green);
- if (result.data?.data) {
- if (Array.isArray(result.data.data)) {
- console.log(` 📊 数据: ${result.data.data.length}条记录`.yellow);
- } else if (result.data.data.rows) {
- console.log(
- ` 📊 数据: 共${result.data.data.total}条,当前页${result.data.data.rows.length}条`
- .yellow,
- );
- } else if (typeof result.data.data === 'string') {
- console.log(` 📊 数据: ${result.data.data}`.yellow);
- } else {
- console.log(` 📊 数据: 返回对象`.yellow);
- }
- }
- } else {
- const errorMsg =
- result.error?.msg || result.error?.message || JSON.stringify(result.error);
- console.log(` ❌ 失败 - 状态: ${result.status}`.red);
- console.log(` 📝 错误: ${errorMsg}`.red);
- }
- results.push({
- ...test,
- success: result.success,
- status: result.status,
- error: result.error,
- });
- }
- return results;
- }
- // 生成测试报告
- function generateReport(results, token) {
- console.log('\n📊 权限测试报告'.rainbow.bold);
- console.log('='.repeat(80).rainbow);
- const totalTests = results.length;
- const successfulTests = results.filter((r) => r.success).length;
- const failedTests = totalTests - successfulTests;
- const successRate = ((successfulTests / totalTests) * 100).toFixed(2);
- console.log(`\n📈 测试统计:`);
- console.log(` 总测试数: ${totalTests}`);
- console.log(` 成功数: ${successfulTests}`.green);
- console.log(` 失败数: ${failedTests}`.red);
- console.log(` 成功率: ${successRate}%`.yellow);
- if (failedTests > 0) {
- console.log(`\n❌ 失败的接口:`);
- results
- .filter((r) => !r.success)
- .forEach((test, index) => {
- const errorMsg = test.error?.msg || test.error?.message || '未知错误';
- console.log(` ${index + 1}. ${test.endpoint} - ${errorMsg}`.red);
- });
- console.log(`\n💡 可能的解决方案:`);
- console.log(` 1. 🗄️ 执行权限配置SQL脚本: source test/complete-permission-config.sql`);
- console.log(` 2. 🔄 重新登录系统刷新权限缓存`);
- console.log(` 3. 🏗️ 重启后端服务重新加载权限配置`);
- console.log(` 4. 🗄️ 检查数据库中sys_menu和sys_role_menu表的数据`);
- } else {
- console.log(`\n🎉 所有接口测试通过!权限配置正确!`.green.bold);
- }
- // 详细结果
- console.log(`\n📋 详细测试结果:`);
- results.forEach((test, index) => {
- const status = test.success ? '✅' : '❌';
- const statusText = test.success ? '成功' : '失败';
- console.log(` ${index + 1}. ${status} ${test.endpoint} - ${statusText}`);
- if (!test.success) {
- const errorMsg = test.error?.msg || test.error?.message || '未知错误';
- console.log(` 错误: ${errorMsg}`.gray);
- }
- });
- }
- // 主测试函数
- async function runPermissionTest() {
- console.log('🔐 物业报修管理权限验证测试'.rainbow.bold);
- console.log('='.repeat(80).rainbow);
- const startTime = new Date();
- try {
- // 1. 获取Token
- console.log('\n🔑 步骤1: 获取认证Token'.magenta.bold);
- const token = await getToken();
- if (!token || token.length < 50) {
- console.log('❌ Token获取失败,无法进行权限测试'.red.bold);
- return;
- }
- console.log('✅ Token获取成功'.green);
- // 2. 测试所有权限接口
- console.log('\n🧪 步骤2: 测试权限接口'.magenta.bold);
- const results = await testAllPermissionAPIs(token);
- // 3. 生成测试报告
- console.log('\n📊 步骤3: 生成测试报告'.magenta.bold);
- generateReport(results, token);
- // 4. 性能统计
- const endTime = new Date();
- const duration = endTime - startTime;
- console.log(`\n⏱️ 测试耗时: ${duration}ms`.cyan);
- } catch (error) {
- console.error('\n💥 权限测试过程出错:'.red.bold, error.message);
- }
- }
- // 如果直接运行此脚本
- if (require.main === module) {
- runPermissionTest()
- .then(() => {
- console.log('\n👋 权限测试完成'.cyan);
- })
- .catch((error) => {
- console.error('权限测试脚本执行失败:', error);
- process.exit(1);
- });
- }
- module.exports = {
- runPermissionTest,
- testAllPermissionAPIs,
- generateReport,
- };
-
|