paratest

paratest

高效PHPUnit测试并行化开源工具

ParaTest是一个专为PHPUnit设计的并行测试工具。它无需额外配置即可自动并行化测试用例或功能测试,显著提高测试效率。该工具支持代码覆盖率报告合并,可在多个并行进程中运行测试并生成统一报告。ParaTest安装简便,提供详细调试信息,并支持PHPStorm集成。对于需要优化PHP项目测试流程的开发者来说,ParaTest是一个值得考虑的开源解决方案。

ParaTestPHPUnit并行测试代码覆盖性能优化Github开源项目

ParaTest

最新稳定版本 下载量 集成 Infection MSI

ParaTest 的目标是支持 PHPUnit 的并行测试。只要你有编写良好的 PHPUnit 测试,你就可以将 paratest 添加到你的项目中,无需额外的引导或配置即可开始使用!

优点:

  • 零配置。安装后,运行 vendor/bin/paratest 按测试用例并行化,或运行 vendor/bin/paratest --functional 按测试并行化。就是这么简单!
  • 代码覆盖率报告合并。在 N 个并行进程中运行你的测试,所有代码覆盖率输出将被合并成一份报告。

安装

使用 composer 运行以下命令进行安装:

composer require --dev brianium/paratest

版本

仅支持 PHPUnit 的最新版本,因此只有 ParaTest 的最新版本会得到积极维护。

这是由于以下原因:

  1. 为了减少 bug、代码重复和与 PHPUnit 的不兼容性,从版本 5 开始,ParaTest 严重依赖 PHPUnit 的 @internal
  2. PHP 和 PHPUnit 最近的快速发展增加了太多维护负担,我们只能负担得起最新版本以保持最新

使用

安装后,可以在 vendor/bin/paratest 找到二进制文件。使用 --help 选项运行它以查看可用选项的完整列表。

测试令牌

TEST_TOKEN 环境变量保证有一个与当前运行的每个其他测试不同的值。这对于例如为每个测试使用不同的数据库很有用:

if (getenv('TEST_TOKEN') !== false) { // 使用 ParaTest $dbname = 'testdb_' . getenv('TEST_TOKEN'); } else { $dbname = 'testdb'; }

还有一个 UNIQUE_TEST_TOKEN 环境变量,保证每次运行和每个进程都有一个唯一的值。

代码覆盖率

ParaTest 在执行测试套件之前始终会预热缓存。

PCOV

如果你已安装 pcov,但需要仅在运行测试时启用它,你必须传递所需的 PHP 二进制选项:

php -d pcov.enabled=1 vendor/bin/paratest --passthru-php="'-d' 'pcov.enabled=1'"

xDebug

如果你已安装 xDebug,通过环境变量激活它就足以让它在子进程中运行:

XDEBUG_MODE=coverage vendor/bin/paratest

所有测试的初始设置

由于 ParaTest 并行运行多个进程,每个进程都有自己的 PHP 解释器实例,用于为每个测试执行一次初始化步骤的技术与 PHPUnit 不同。以下模式不会按预期工作 - 只运行一次初始化 - 而是每个进程运行一次初始化:

private static bool $initialized = false; public function setUp(): void { if (! self::$initialized) { self::initialize(); self::$initialized = true; } }

这是因为静态变量在单个进程执行期间持续存在。在并行测试中,每个进程都有一个单独的 $initialized 实例。你可以使用以下模式来确保初始化在整个测试调用中只运行一次:

static bool $initialized = false; public function setUp(): void { if (! self::$initialized) { // 我们利用文件系统作为共享可变状态来协调进程之间的通信 touch('/tmp/test-initialization-lock-file'); $lockFile = fopen('/tmp/test-initialization-lock-file', 'r'); // 尝试获取独占锁 - 第一个进程获胜 if (flock($lockFile, LOCK_EX | LOCK_NB)) { // 由于我们是唯一拥有独占锁的进程,我们运行初始化 self::initialize(); } else { // 如果没有可用的独占锁,则阻塞直到第一个进程完成初始化 flock($lockFile, LOCK_SH); } self::$initialized = true; } }

故障排除

如果你在运行 paratest 时遇到问题,请尝试通过 --verbose --debug 启用调试输出以获取有关问题的更多信息。

当子进程失败时,输出中会给出原始命令,然后可以将其复制粘贴到终端中运行和调试。所有内部命令都使用 --printer [...]\NullPhpunitPrinter 运行,这会静音原始 PHPUnit 输出:在调试运行期间,删除该选项以恢复输出并查看 PHPUnit 正在做什么。

注意事项

  1. 不支持常量、静态方法、静态变量以及其他测试类消耗的测试类公开的所有内容(包括反射)。这是由于当前 WrapperRunner 实现的限制以及 PHPUnit 搜索类的方式。解决方法是将共享代码放入非测试类中。

与 PHPStorm 集成

ParaTest 提供了一个专用的二进制文件来与 PHPStorm 配合使用;按照以下步骤在其中使用 ParaTest:

  1. 确保你已经在 PHPStorm 中配置了 PHPUnit:https://www.jetbrains.com/help/phpstorm/using-phpunit-framework.html#php_test_frameworks_phpunit_integrate
  2. 转到 运行 -> 编辑配置...
  3. 选择 添加新配置,选择 PHPUnit 类型并将其命名为 ParaTest
  4. 命令行 -> 解释器选项 中添加 ./vendor/bin/paratest_for_phpstorm
  5. 你想传递给 ParaTest 的任何其他 ParaTest 选项都应放在 测试运行器 -> 测试运行器选项 部分

现在你应该在配置列表中有一个 ParaTest 运行。 它应该可以与 运行 覆盖层的 重新运行失败的测试切换自动测试 按钮原生配合使用。

运行覆盖率

使用可用的覆盖率引擎之一的覆盖率必须已经在 PHPStorm 中配置,并且在顺序运行测试时能正常工作,以便辅助二进制文件能够正确处理代码覆盖率。

对贡献者:测试 ParaTest 本身

在创建拉取请求之前,请确保使用 make 命令运行所有必要的检查。

编辑推荐精选

GPT Plus|Pro充值

GPT Plus|Pro充值

GPT充值

支持 ChatGPT Plus / Pro 充值服务,支付便捷,自动发货,售后可查。

GPT Image 2中文站

GPT Image 2中文站

AI 图片生成平台

GPT Image 2 是面向用户的 AI 图片生成平台,支持文生图、图生图及多模型创意工作流。

Vecbase

Vecbase

你的AI Agent团队

Vecbase 是专为 AI 团队打造的智能工作空间,将数据管理、模型协作与知识沉淀整合于一处。算法、产品与业务在同一平台无缝协同,让从数据到 AI 应用的落地更快一步。

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

下拉加载更多