1. 准备Debian系统环境
在Debian上测试Laravel代码前,需先安装必要的依赖(PHP、Composer、Web服务器、数据库等)。更新系统包并安装PHP及扩展(如php-cli、php-mysql、php-curl等)、Composer、Nginx/Apache、MySQL/MariaDB。例如,安装PHP及相关扩展可使用:
sudo apt update && sudo apt install -y php php-cli php-fpm php-json php-mysql php-zip php-gd php-mbstring php-curl php-xml php-bcmath 安装Composer:
curl -sS https://getcomposer.org/installer | sudo mv composer.phar /usr/local/bin/composer 这些步骤确保Laravel及测试工具能正常运行。
2. 搭建Laravel测试环境
使用Composer创建新的Laravel项目或进入现有项目目录:
laravel new my-laravel-app # 新建项目 cd my-laravel-app 配置Web服务器(以Nginx为例),创建/etc/nginx/sites-available/my-laravel-app文件,内容如下:
server { listen 80; server_name localhost; # 替换为你的域名/IP root /var/www/my-laravel-app/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 根据PHP版本调整 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ /\.ht { deny all; } } 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/my-laravel-app /etc/nginx/sites-enabled sudo nginx -t && sudo systemctl restart nginx 配置数据库(MySQL为例),登录MySQL并创建数据库及用户:
CREATE DATABASE laravel_test; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON laravel_test.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES; 修改.env文件,设置数据库连接和测试环境变量:
APP_ENV=testing APP_DEBUG=true DB_CONNECTION=mysql DB_DATABASE=laravel_test DB_USERNAME=laravel_user DB_PASSWORD=your_password 生成应用密钥:
php artisan key:generate 运行数据库迁移:
php artisan migrate 完成环境搭建后,即可开始编写和运行测试。
3. 编写Laravel测试用例
Laravel的测试文件位于tests目录,分为Feature(功能测试)和Unit(单元测试)子目录。可使用Artisan命令快速生成测试类:
php artisan make:test ExampleTest # 生成功能测试 php artisan make:test UserTest --unit # 生成单元测试 测试类继承Tests\TestCase,包含setUp()方法(初始化测试环境)和测试方法(以test开头)。示例如下:
namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class ExampleTest extends TestCase { public function test_homepage_returns_200() { $response = $this->get('/'); $response->assertStatus(200); // 断言状态码为200 } } namespace Tests\Unit; use Tests\TestCase; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { use RefreshDatabase; // 每次测试前刷新数据库 public function test_user_creation() { $user = User::factory()->create(); // 使用工厂创建用户 $this->assertDatabaseHas('users', ['email' => $user->email]); // 断言数据库存在该用户 } } namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; use App\Models\Post; class PostTest extends TestCase { use RefreshDatabase; public function test_create_post() { $response = $this->post('/posts', [ 'title' => 'Test Post', 'content' => 'This is a test post.' ]); $response->assertRedirect('/posts'); // 断言重定向到帖子列表 $this->assertDatabaseHas('posts', ['title' => 'Test Post']); // 断言帖子已保存 } } 更多断言方法可参考Laravel文档(如assertSee、assertJson等)。
4. 运行Laravel测试
Laravel提供了两种运行测试的方式:
php artisan test 该命令会自动运行tests目录下的所有测试用例,并输出详细结果(包括通过/失败的测试数量、失败原因)。添加--verbose选项可查看更详细的执行信息:
php artisan test --verbose vendor/bin/phpunit 或运行指定测试类/方法:
vendor/bin/phpunit tests/Feature/ExampleTest.php # 运行指定测试类 vendor/bin/phpunit tests/Feature/ExampleTest.php --filter test_homepage_returns_200 # 运行指定测试方法 运行测试时,Laravel会自动处理数据库迁移(通过RefreshDatabase trait)和环境切换(APP_ENV=testing),确保测试环境与生产环境隔离。
5. 高级测试技巧
Mockery或Laravel的shouldReceive方法模拟API调用、邮件发送等外部依赖,避免测试时依赖真实服务。例如:\Mail::fake(); // 模拟邮件发送 $user = User::factory()->create(); // 执行触发邮件的操作(如注册) Mail::assertSent(WelcomeEmail::class, function ($mail) use ($user) { return $mail->hasTo($user->email); // 断言邮件发送给正确用户 }); php artisan test --parallel命令并行运行测试,加快测试速度(需安装pcntl扩展)。Benchmark工具测量代码片段执行时间,或使用PHPUnit的性能测试功能(如@group performance标记性能测试类)。