1. 准备Debian环境
在开始前,确保Debian系统已更新并安装必要工具:
sudo apt update && sudo apt upgrade -y
安装PHP(需7.3+版本)及常用扩展(支持Laravel和测试):
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php # 添加Ondřej Surý的PHP仓库(支持最新版本)
sudo apt update
sudo apt install -y php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
安装Composer(PHP依赖管理工具):
curl -sS https://getcomposer.org/installer | sudo mv composer.phar /usr/local/bin/composer
2. 创建/配置Laravel项目
若未创建项目,使用Composer生成新项目:
composer create-project --prefer-dist laravel/laravel your_project_name
cd your_project_name
复制.env.example生成.env文件,并配置数据库连接(替换为实际信息):
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_test # 测试专用数据库
DB_USERNAME=your_db_user
DB_PASSWORD=your_db_password
生成应用密钥:
php artisan key:generate
3. 配置测试环境
Laravel通过.env.testing文件覆盖测试环境配置(推荐),避免污染生产/开发环境。创建并编辑该文件:
cp .env .env.testing
修改.env.testing中的数据库配置(指向测试数据库):
APP_ENV=testing
APP_DEBUG=true
DB_DATABASE=laravel_test
若需临时切换环境,运行测试时可添加--env=testing参数。
4. 安装PHPUnit
Laravel默认集成PHPUnit,若未安装,通过Composer添加开发依赖:
composer require --dev phpunit/phpunit
5. 编写测试用例
Laravel的测试文件存放在tests目录,分为单元测试(Unit子目录)和功能测试(Feature子目录)。
php artisan make:test ExampleTest
这会在tests/Feature下生成ExampleTest.php,继承Tests\TestCase(包含基础测试方法)。<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase; // 数据库刷新 trait
use Tests\TestCase;
class ExampleTest extends TestCase
{
use RefreshDatabase; // 每次测试后重置数据库
/** @test */
public function homepage_returns_200_status()
{
$response = $this->get('/');
$response->assertStatus(200); // 断言状态码为200
}
}
注:@test注解或方法名以test开头均可标记为测试方法。6. 运行测试
使用PHPUnit执行测试:
./vendor/bin/phpunit
./vendor/bin/phpunit --filter ExampleTest
./vendor/bin/phpunit --verbose
php artisan test --parallel
7. 常用测试增强工具
RefreshDatabase trait):use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
use RefreshDatabase;
// ...
}
composer require --dev laravel/dusk
php artisan dusk:install # 生成Dusk配置
编写Dusk测试(如登录功能):<?php
namespace Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
class LoginTest extends DuskTestCase
{
/** @test */
public function user_can_login()
{
$this->browse(function (Browser $browser) {
$browser->visit('/login')
->type('email', 'user@example.com')
->type('password', 'password')
->press('Login')
->assertPathIs('/home');
});
}
}
运行Dusk测试:php artisan dusk
注意事项
RefreshDatabase trait可自动回滚数据库迁移,确保每次测试从干净状态开始。