Files
FendxPHP/test.php
Lawson 2782d765fb feat(database): 添加用户角色权限系统及相关监控功能
- 创建用户表(users)包含基本信息和认证字段
- 创建角色表(roles)用于权限控制
- 创建权限表(permissions)定义系统权限
- 创建用户角色关联表(user_roles)建立用户与角色关系
- 创建角色权限关联表(role_permissions)建立角色与权限关系
- 创建迁移记录表(migrations)追踪数据库变更
- 添加AdminController提供管理员面板功能
- 实现系统监控、配置管理、缓存清理等功能
- 添加AOP切面编程支持的各种通知类型
- 实现告警管理AlertManager支持多渠道告警
- 添加文档注解接口规范
2026-04-08 17:00:28 +08:00

268 lines
6.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
/**
* FendxPHP 快速冒烟测试脚本
* 使用方法: php test.php
*/
echo "🚀 FendxPHP 冒烟测试开始...\n\n";
// 检查PHP版本
echo "📋 检查PHP版本...\n";
$phpVersion = PHP_VERSION;
echo "PHP版本: $phpVersion\n";
if (version_compare($phpVersion, '8.1.0', '<')) {
echo "❌ PHP版本过低需要 >= 8.1\n";
exit(1);
}
echo "✅ PHP版本检查通过\n\n";
// 检查必需扩展
echo "📋 检查必需扩展...\n";
$requiredExtensions = ['pdo', 'redis', 'json', 'mbstring'];
foreach ($requiredExtensions as $ext) {
if (!extension_loaded($ext)) {
echo "❌ 缺少扩展: $ext\n";
exit(1);
}
echo "$ext 扩展已安装\n";
}
echo "\n";
// 检查文件结构
echo "📋 检查项目结构...\n";
$requiredDirs = [
'app',
'config',
'fendx-framework',
'public',
'runtime',
'docs'
];
foreach ($requiredDirs as $dir) {
if (!is_dir($dir)) {
echo "❌ 缺少目录: $dir\n";
exit(1);
}
echo "✅ 目录 $dir 存在\n";
}
echo "\n";
// 检查核心文件
echo "📋 检查核心文件...\n";
$requiredFiles = [
'fendx.php',
'public/index.php',
'config/config.php',
'FendxPHP_项目架构.txt',
'README.md'
];
foreach ($requiredFiles as $file) {
if (!file_exists($file)) {
echo "❌ 缺少文件: $file\n";
exit(1);
}
echo "✅ 文件 $file 存在\n";
}
echo "\n";
// 检查配置文件
echo "📋 检查配置文件...\n";
$configFiles = [
'config/app.php',
'config/database.php',
'config/cache.php',
'config/routes.php'
];
foreach ($configFiles as $file) {
if (!file_exists($file)) {
echo "❌ 缺少配置文件: $file\n";
exit(1);
}
echo "✅ 配置文件 $file 存在\n";
}
echo "\n";
// 检查框架模块
echo "📋 检查框架模块...\n";
$frameworkModules = [
'fendx-framework/fendx-common',
'fendx-framework/fendx-core',
'fendx-framework/fendx-web',
'fendx-framework/fendx-db',
'fendx-framework/fendx-cache',
'fendx-framework/fendx-security',
'fendx-framework/fendx-log',
'fendx-framework/fendx-starter',
'fendx-framework/fendx-job',
'fendx-framework/fendx-file'
];
foreach ($frameworkModules as $module) {
if (!is_dir($module)) {
echo "❌ 缺少模块: $module\n";
exit(1);
}
echo "✅ 模块 $module 存在\n";
}
echo "\n";
// 检查应用模块
echo "📋 检查应用模块...\n";
$appModules = [
'app/Controller',
'app/Service',
'app/Dao',
'app/Entity',
'app/Job',
'app/Command'
];
foreach ($appModules as $module) {
if (!is_dir($module)) {
echo "⚠️ 应用模块 $module 不存在(可选)\n";
continue;
}
echo "✅ 应用模块 $module 存在\n";
}
echo "\n";
// 检查运行时目录权限
echo "📋 检查运行时目录权限...\n";
$runtimeDirs = ['runtime/logs', 'runtime/cache', 'runtime/temp', 'runtime/storage'];
foreach ($runtimeDirs as $dir) {
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
echo "📁 创建目录: $dir\n";
}
if (!is_writable($dir)) {
echo "❌ 目录 $dir 不可写\n";
exit(1);
}
echo "✅ 目录 $dir 可写\n";
}
echo "\n";
// 尝试加载配置
echo "📋 测试配置加载...\n";
try {
$config = require 'config/config.php';
if (!is_array($config)) {
echo "❌ 配置文件格式错误\n";
exit(1);
}
echo "✅ 配置文件加载成功\n";
// 检查必需配置项
$requiredConfigKeys = ['app', 'database', 'cache'];
foreach ($requiredConfigKeys as $key) {
if (!isset($config[$key])) {
echo "❌ 缺少配置项: $key\n";
exit(1);
}
echo "✅ 配置项 $key 存在\n";
}
} catch (Exception $e) {
echo "❌ 配置加载失败: " . $e->getMessage() . "\n";
exit(1);
}
echo "\n";
// 测试数据库连接(可选)
echo "📋 测试数据库连接...\n";
try {
$dbConfig = require 'config/database.php';
$dsn = "mysql:host={$dbConfig['default']['host']};dbname={$dbConfig['default']['dbname']}";
$pdo = new PDO($dsn, $dbConfig['default']['username'], $dbConfig['default']['password']);
$pdo->query('SELECT 1');
echo "✅ 数据库连接成功\n";
} catch (Exception $e) {
echo "⚠️ 数据库连接失败: " . $e->getMessage() . "\n";
echo " 请检查数据库配置和服务状态\n";
}
echo "\n";
// 测试Redis连接可选
echo "📋 测试Redis连接...\n";
try {
$cacheConfig = require 'config/cache.php';
$redis = new Redis();
$redis->connect($cacheConfig['host'], $cacheConfig['port']);
if (!empty($cacheConfig['password'])) {
$redis->auth($cacheConfig['password']);
}
$redis->ping();
echo "✅ Redis连接成功\n";
} catch (Exception $e) {
echo "⚠️ Redis连接失败: " . $e->getMessage() . "\n";
echo " 请检查Redis配置和服务状态\n";
}
echo "\n";
// 检查语法错误
echo "📋 检查PHP语法...\n";
$phpFiles = [];
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('.', RecursiveDirectoryIterator::SKIP_DOTS)
);
foreach ($iterator as $file) {
if ($file->isFile() && $file->getExtension() === 'php') {
$phpFiles[] = $file->getPathname();
}
}
$syntaxErrors = 0;
foreach ($phpFiles as $file) {
$output = [];
$returnCode = 0;
exec("php -l \"$file\" 2>&1", $output, $returnCode);
if ($returnCode !== 0) {
echo " 语法错误: $file\n";
echo " " . implode("\n ", $output) . "\n";
$syntaxErrors++;
}
}
if ($syntaxErrors === 0) {
echo " 所有PHP文件语法正确\n";
} else {
echo " 发现 $syntaxErrors 个语法错误\n";
exit(1);
}
echo "\n";
// 生成测试报告
echo "📊 生成测试报告...\n";
$report = [
'test_time' => date('Y-m-d H:i:s'),
'php_version' => PHP_VERSION,
'extensions' => get_loaded_extensions(),
'memory_limit' => ini_get('memory_limit'),
'max_execution_time' => ini_get('max_execution_time'),
'file_count' => count($phpFiles),
'directory_structure' => $requiredDirs,
'framework_modules' => $frameworkModules
];
file_put_contents('runtime/test_report.json', json_encode($report, JSON_PRETTY_PRINT));
echo " 测试报告已保存到 runtime/test_report.json\n\n";
// 最终结果
echo "🎉 FendxPHP 冒烟测试完成!\n";
echo " 所有检查通过,框架可以正常运行\n\n";
echo "📝 下一步操作:\n";
echo "1. 启动Web服务: php -S localhost:8000 -t public\n";
echo "2. 访问健康检查: curl http://localhost:8000/health\n";
echo "3. 测试API接口: curl http://localhost:8000/api/users\n";
echo "4. 查看详细文档: docs/冒烟测试指南.md\n\n";
echo "🚀 框架已准备就绪,开始开发吧!\n";