PHP 最优雅的测试框架 Pest
正式发布了 v4 版本!这是该框架迄今为止最重大的升级,带来了令人瞩目的浏览器测试功能。
对于不熟悉 Pest
的开发者,Pest 是一个专为 PHP 设计的现代化测试框架,以其简洁优雅的语法而闻名。它基于 PHPUnit 构建,但提供了更加直观和易读的测试编写体验。
Pest v4 的浏览器测试特性让你能够编写优雅、可维护的浏览器测试代码,并且完美支持 Laravel 的测试 API,还能并行运行测试。这是第一次,浏览器测试写起来就像单元测试一样舒适自然。
Pest
的创建者 Nuno Maduro
在 Laracon US 大会上演示了 Pest v4 的新浏览器测试功能。
Pest v4 的浏览器测试功能基于现代化的 Playwright 引擎,为开发者提供了前所未有的测试体验:
Event::fake()
、assertAuthenticated()
和模型工厂RefreshDatabase
trait,甚至可以使用 SQLite 内存数据库以下是一个实际的密码重置功能测试示例:
it('may reset the password', function () {
// 使用 Laravel 测试助手
Notification::fake();
// 数据库操作 — 使用 RefreshDatabase trait(甚至支持 SQLite 内存数据库)
$this->actingAs(User::factory()->create());
$page = visit('/sign-in') // 在真实浏览器中访问页面
->on()->mobile() // 或者 ->desktop(), ->tablet() 等
->inDarkMode(); // 或者 ->inLightMode()
$page->assertSee('Sign In')
->click('Forgot Password?')
->type('email', 'nuno@laravel.com')
->press('Send Reset Link')
->assertSee('We have emailed your password reset link!')
->assertNoJavascriptErrors(); // 或者 ->assertNoConsoleLogs()
Notification::assertSent(ResetPassword::class);
});
这个例子完美展现了 Pest v4 浏览器测试的优雅语法和强大功能。
在开始之前,请确保你的开发环境满足以下要求:
要开始使用 Pest v4 的浏览器测试功能,只需要安装相应的插件:
# 安装 Pest 浏览器测试插件
composer require pestphp/pest-plugin-browser --dev
# 安装 Playwright(浏览器自动化引擎)
npm install playwright@latest
# 下载浏览器二进制文件
npx playwright install
安装完成后,你就可以在任何地方使用 visit()
函数了。创建一个简单的测试文件:
// tests/Feature/HomePageTest.php
<?php
it('can visit the home page', function () {
visit('/')
->assertSee('欢迎')
->assertNoJavascriptErrors();
});
运行测试只需要执行:
./vendor/bin/pest
Pest 会自动处理其余工作:启动浏览器、导航到页面、执行你指定的操作。
什么是烟雾测试? 烟雾测试是一种基础的软件测试方法,用于验证应用程序的核心功能是否正常工作。就像检查房子是否有烟雾来判断是否着火一样,烟雾测试能快速发现应用中的基本问题。
在真实浏览器中进行烟雾测试从未如此简单。使用 Pest v4,你可以轻松访问应用的所有页面,确保它们不会抛出 JavaScript 错误,也不会产生控制台错误:
$routes = ['/', '/about', '/contact'];
visit($routes)->assertNoSmoke();
// assertNoSmoke() 是以下断言的简写:
// - assertNoJavascriptErrors()
// - assertNoConsoleLogs()
这种方式让你能够快速验证整个应用的基本功能是否正常。
想要确保页面外观在版本迭代中保持一致?Pest v4 引入了视觉回归测试功能,通过 assertScreenshotsMatches()
断言实现。这个功能允许你对页面进行截图,并与基准图像进行比较,确保 UI 在代码变更过程中保持一致:
$pages = visit(['/', '/about', '/contact']);
$pages->assertScreenshotsMatches();
这只是 Pest v4 浏览器测试功能的冰山一角。更多详细信息,请查阅官方的浏览器测试文档。
什么是测试分片? 测试分片(Test Sharding)是一种将大型测试套件分割成多个较小部分的技术,这些部分可以在不同的进程或机器上并行执行,从而显著减少总体测试时间。
Pest v4 引入了测试分片功能,允许你将测试套件拆分为更小、更易管理的块。这对于大型应用(或运行浏览器测试时)特别有用,因为一次性运行所有测试可能会非常耗时。
为什么需要测试分片?
这个特性在 CI 平台上尤其有价值。在 GitHub Actions 等环境中,你无法再进行垂直扩展,而是需要水平扩展。这意味着你可以在多台机器上并行运行测试,显著加速测试套件的执行。
要开始使用测试分片,可以在运行 Pest 时使用 --shard
选项:
# GitHub 工作流一
./vendor/bin/pest --shard=1/4
# GitHub 工作流二
./vendor/bin/pest --shard=2/4
# GitHub 工作流三
./vendor/bin/pest --shard=3/4
# GitHub 工作流四
./vendor/bin/pest --shard=4/4
你还可以将其与 --parallel
选项结合使用,以真正最大化测试套件的执行速度:
./vendor/bin/pest --shard=1/4 --parallel
在 GitHub Actions 中设置分片配置非常简单,只需确保每个作业运行测试套件的不同分片:
strategy:
matrix:
shard: [1, 2, 3, 4]
name: Tests (Shard ${{ matrix.shard }}/4)
steps:
- name: Run tests
run: pest --parallel --shard ${{ matrix.shard }}/4
还记得等待类型覆盖率运行的日子吗?那些日子一去不复返了!Pest v4 引入了全新的类型覆盖率引擎,性能相比之前版本有了显著提升。
性能提升数据:
这意味着你可以快速检查类型覆盖率,无需长时间等待,让开发工作流程更加高效。
此外,类型覆盖率现在也支持分片功能。你可以像运行测试一样,使用 --shard
选项运行类型覆盖率检查。
Pest v4 引入了一个新功能:检查测试代码中的不当内容(带有侮辱性词语)。这对于维护干净、专业的代码库特别有用,尤其是在协作环境中。
首先安装 Profanity
插件:
composer require pestphp/pest-plugin-profanity --dev
然后在运行 Pest 时添加 --profanity
选项:
./vendor/bin/pest --profanity
如果代码中包含不当内容,它们会以红色高亮显示,并显示相应的行号和发现的不当词汇。
例如,pr31(f*ck)
表示在第 31 行发现了 "fuck" 这个词。
Pest v4 引入了根据环境条件跳过测试的能力。你可以使用 skipLocally()
在本地运行时跳过测试,或使用 skipOnCi()
在 CI 服务器上跳过测试:
it('does not run locally', function () {
// 这个测试在本地运行时会被跳过
})->skipLocally();
it('does not run on CI', function () {
// 这个测试在 CI 服务器上会被跳过
})->skipOnCi();
这个功能让你能够更精确地控制测试的执行环境,提高测试效率。
not->toHaveSuspiciousCharacters()
架构期望,帮助识别代码中的潜在可疑字符toBeSlug
期望,帮助验证字符串是否为有效的 URL slugPest v4 基于 PHPUnit 12 构建,这意味着你可以获得 PHPUnit 的所有最新功能和改进。务必查看 PHPUnit 12 的发布公告以了解更多详情。
如果你已经在使用早期版本的 Pest,官方提供了详细的升级指南。对于新用户,可以查看官方的安装指南获取分步说明。
Pest v4 的浏览器测试功能特别适合以下场景:
特性 | Pest v4 | Selenium | Cypress | Playwright |
---|---|---|---|---|
语法简洁性 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
Laravel 集成 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ |
多浏览器支持 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
执行速度 | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
学习曲线 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
Pest v4 的发布标志着 PHP 测试生态系统的一个重要里程碑。浏览器测试功能的引入,让端到端测试变得像编写单元测试一样简单优雅。结合测试分片、性能优化和各种实用功能,Pest v4 为现代 PHP 开发提供了完整的测试解决方案。
核心优势总结:
无论你是 Laravel 开发者还是 PHP 生态系统的其他参与者,现在都是开始使用 Pest 进行测试的最佳时机。Pest v4 的发布为 PHP 开发者带来了更优雅、更高效的测试体验!
相关资源:
技术标签:#PHP
#Testing
#Laravel
#Pest
#BrowserTesting
#E2E
#Playwright