在 Laravel 中开始使用并行测试和代码覆盖率
发布时间:作者: Paul Redmond
让我们快速浏览一下设置,开始进行并行测试,并设置代码覆盖率报告来分析我们测试了多少代码。
我个人喜欢通过 XDebug 使用 HTML 报告,因为我喜欢在开发功能时可视化逐行覆盖率。
在本教程中,我将向您展示如何快速设置 HTML 报告以及如何在新的项目中设置并行测试。
设置
自从 Laravel v8.25 以来,Artisan 在 Laravel 中正式支持并行测试。让我们通过设置一个新的 Laravel 项目,并逐步完成安装 Paratest 和配置报告的过程,来了解如何设置并行测试和覆盖率报告。
在新的项目中并行运行测试不会帮助我们加快测试运行速度;但是,随着测试的增加,您会注意到性能的提升。
首先,创建一个新的 Laravel 应用程序,并进行版本控制,以便我们能够在设置过程中看到更改。
laravel new parallel-demo --git
laravel
命令创建我们的项目并提交代码,因此我们获得了干净的安装和单个提交。
为了在 PHPUnit 中使用 Laravel 的 --parallel
标志,我们必须安装 ParaTest。当我们第一次运行测试时,Laravel 会方便地提示我们这样做。
php artisan test --parallel Running tests in parallel requires "brianium/paratest". Do you wish to install it as a dev dependency? (yes/no) [no]:> yesUsing version ^6.6 for brianium/paratest./composer.json has been updated# ...ParaTest v6.6.4 upon PHPUnit 9.5.25 #StandWithUkraine .. 2 / 2 (100%) Time: 00:00.300, Memory: 22.00 MB OK (2 tests, 2 assertions)
Paratest 现在已正确安装,我们可以继续使用覆盖率运行测试并配置 HTML 报告。
覆盖率报告
另一个有用的测试标志是 --coverage
,它会将一个漂亮的基于文本的版本输出到终端。
php artisan test --parallel --coverage ERROR Code coverage driver not available. Did you set Xdebug's coverage mode?
根据您的本地 PHP 设置,您可能会收到上述错误消息,提示您设置 Xdebug 的覆盖率模式。我们不会详细介绍如何设置代码覆盖率工具,但是有几种方法可供选择。我不介意使用 Xdebug 3 的覆盖率,因为我经常在开发中使用 Xdebug 进行调试。
要使覆盖率正常工作,您需要将 Xdebug 模式设置为覆盖率。
XDEBUG_MODE=coverage php artisan test --parallel --coverage
运行完上述命令后,您应该会看到类似于覆盖率报告的内容。
HTML 覆盖率报告
虽然基于文本的覆盖率很有用,但我喜欢使用 HTML 覆盖率报告来可视化已覆盖和未覆盖的代码行。它们分别以绿色和红色突出显示。
以上代码是来自默认 Laravel 安装的示例,您可以决定是否要测试/覆盖与 Laravel 一起提供的代码。我个人认为,我更喜欢忽略最初生成的的文件,只关注我添加到应用程序中的代码。
添加 HTML 报告非常简单。打开 phpunit.xml
文件,找到 <coverage/>
并添加 <report/>
标签。
<coverage processUncoveredFiles="true"> <include> <directory suffix=".php">./app</directory> </include> <report> <html outputDirectory="tests/Coverage/html"/> </report></coverage>
您可以将覆盖率放在任何位置,但是您可能希望从版本控制中忽略生成的的文件。也许您可以在项目的根目录中使用 coverage/
文件夹,将其放在 storage
中的某个位置,或者像上面那样将其嵌入 tests/
文件夹中。选择权由您决定!
使用以上路径示例,将以下内容添加到您的 .gitignore 文件中。
# ...tests/Coverage/
当您使用覆盖率运行测试时,它将生成 HTML 报告。然后,您可以在浏览器中打开 tests/Coverage/html/index.html
文件以查看报告。
有了这些,您应该可以轻松地设置并行运行测试,并配置 HTML 报告,以便在开发过程中轻松可视化覆盖率!
虽然我们设置了并行测试和覆盖率报告,但我们可以通过忽略与默认 Laravel 安装一起提供的文件来改进覆盖率报告。