10 个 WordPress 插件的 PHP 测试工具
已发表: 2022-08-05没有软件是没有错误的。 这是适用于每种编程语言和每种应用程序的公理。
当这些错误在您的网站中部署在生产环境中时,您可能会遭受不同严重程度的不利后果。 这些是一些例子,从烦人到经济破坏:
- 轻度:用户无法点击断开的链接。
- 严重:联系表单的“提交”按钮不起作用,用户只有在撰写完他们的消息后才会发现。
- 严重:支付网关配置不正确,导致用户无法在您的电子商务商店购买产品,从而放弃该网站。
没有任何一种工具足以处理从所有不同可能角度测试应用程序的所有方面。 事实上,除了发现错误之外,执行额外的测试来验证应用程序的其他功能也很重要,例如:
- 可访问性和可用性
- 可接受的性能
- 交通和负载处理
在本文中,我们将回顾开源社区创建的 10 个工具,这些工具可以帮助构建用于测试 WordPress 插件中的 PHP 代码的堆栈。 其中一些工具是专门为测试 PHP 代码而设计的; 其他用于测试 WordPress 代码; 并创建了一些其他工具来处理一些对测试有用的通用功能。
1.DevKinsta
DevKinsta 是 WordPress 网站的本地开发套件。 只需提供一些基本详细信息,即可立即安装 WordPress 站点的本地实例,并且它捆绑了几个有用的开发工具,如电子邮件收件箱、数据库管理器和日志记录,以便于排除故障。
DevKinsta 通常由开发人员和设计人员在创建他们的 WordPress 主题和插件时使用。 但它也可以用作执行集成和功能测试的本地 Web 服务器。 这是与 HTTP 工具一起完成的,该工具可帮助您验证响应内容和标头是否正确。
DevKinsta 的主要功能是:
- 轻松启动新的 WordPress 环境并在不再需要时将其删除
- 允许针对任何受支持的 PHP 和 WordPress 版本以及它们的任意组合进行测试
- 与 MyKinsta 无缝集成,用户可以在其中创建其站点和数据的外部备份
2.PHP单元
PHPUnit 是一个面向程序员的 PHP 测试框架。 它是在 PHP 代码中执行单元测试的最流行的框架,目的是验证源代码的各个单元。
PHPUnit 测试允许开发人员在开发周期内尽早发现问题,有助于确保没有引入代码回归(即对某些代码的更改不会在其他地方引起问题)。
PHPUnit 的主要功能是:
- 新功能测试
- 新重构的代码验证
- 可以在选择的持续集成过程中完全自动化和执行
- 调试
- 通过功能调用和约束自动记录预期用途
- 允许测试驱动开发 (TDD) 方法,其中开发人员首先创建第一个测试,然后是功能
3.脑猴
Brain Monkey 是 PHP 和 WordPress 的测试工具。 它提供了与框架无关的工具,允许您重新定义 PHP 方法并测试任何 PHP 应用程序的行为。 它还提供了专门用于测试 WordPress 代码的工具。
Brain Monkey 的主要特点是:
- 允许单元测试与外部的、未加载的库进行交互
- 允许调用 WordPress 函数而无需加载 WordPress 环境
- 可以断言 WordPress 函数(例如
add_filter
或do_action
)按预期调用功能
4. 大脑伪装者
Brain Faker 使用 Faker(一个流行的用于生成假数据的 PHP 库)和 Brain Monkey 来提供轻松生成假 WordPress 对象和相关功能供您测试,包括:
-
WP_Post
实例,并模拟get_post
和get_post_field
等相关函数 WP_User
实例和模拟相关函数,如get_userdata
、get_user_by
、user_can
等WP_Term
实例,并模拟get_term
和get_term_by
等相关函数WP_Comment
实例WP_Site
实例,并模拟get_site
等相关函数WP_Post_Type
实例,并模拟get_post_type_object
和post_type_exists
等相关函数WP_Taxonomy
实例,并模拟get_taxonomy
和taxonomy_exists
等相关函数WP_Error
实例
Brain Faker 的主要特点是:
- 将虚假但真实的 WordPress 数据注入到单元测试中——访问虚假帖子的修改日期将表现为一个日期(例如
2022-04-17T13:06:58+00:00
),用户名将是合适的(例如"John Smith"
),一个虚假的帖子实例是由一个虚假的用户实例创作的,依此类推 - 假数据可以预先提供或随机生成
- 可扩展——开发人员可以从他们自己的 WordPress 插件中模拟类和函数
5. 嘲讽
Mockery 是一个简单而灵活的 PHP 模拟对象框架,旨在与 PHPUnit、PHPSpec 或任何其他单元测试框架一起使用。 它提供了一个测试双重框架,能够使用人类可读的领域特定语言 (DSL) 定义所有可能的对象操作和交互。
Mockery 的主要功能是:
- 支持灵活生成模拟对象和存根(为测试期间的特定调用提供预定义的预设答案)
- 增强 PHPUnit 的测试隔离能力
- 灵活的 API 来表达模拟期望,尽可能地模仿自然语言描述(例如
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - 使用内存中的模拟对象进行单元测试,以避免需要访问较慢的系统(例如数据库、文件系统或外部服务)
- 可以模拟确定性和非确定性行为
6. WordPress 原生导出工具
WordPress 的原生导出工具将网站的 WordPress 数据作为 XML 文件下载到您的设备,包括帖子、页面、自定义帖子类型、评论、自定义字段、类别、标签、自定义分类、用户和媒体。 XML 文件具有可导入任何 WordPress 站点的自定义格式(称为 WordPress eXtended RSS 或 WXR 文件)。
此工具不是专门为测试而设计的。 但是,它的用处在于能够创建包含合适数据集的 WordPress 数据库的快照,然后可以将其用于测试。 这意味着可以将包含真实数据的生产中的 WordPress 站点导出并导入到开发或暂存实例中以测试新功能。
WordPress 导出工具的主要功能是:
- 使用实际的 WordPress 站点创建测试数据
- 整个数据库的可共享导出文件
- 对集成和单元测试都很有用
7. 狂饮
Guzzle 是一个 PHP HTTP 客户端,可以轻松发送 HTTP 请求并与 Web 服务集成。
Guzzle 是一种通用工具,因此测试只是其可能的用例之一。 与 DevKinsta 等本地 Web 服务器一起,Guzzle 可以执行集成测试:您可以使用 Guzzle 向开发 Web 服务器发送 HTTP 请求,然后将响应传递给 PHPUnit 中的单元测试,以验证内容和标头按预期设置。
Guzzle 的主要功能是:
- 满足 PHP 标准建议“PSR-7”(用于 HTTP 消息接口),排除供应商锁定
- 简单快速
- 针对实际 WordPress 站点执行测试,提高可靠性
- 可以在 PHPUnit 中执行,方便快捷
- 集成测试可以自动化并添加到持续集成过程中
8. WP-CLI
WP-CLI 是 WordPress 的命令行界面。 有了它,您无需使用网络浏览器即可更新插件、配置多站点安装等等。
WP-CLI 并不是专门的测试工具,但测试是其众多用例之一。 例如,在启动新的开发 Web 服务器后,您可以执行包含 WP-CLI 命令的 bash 脚本,将测试数据导入 WordPress 站点,创建具有适当角色和功能的用户,安装所需的第三方插件,以及其他此类任务。
由于带有 WP-CLI 命令的脚本可以存储在您的 Git 存储库中,因此执行集成测试的过程可以自动化并集成到您的持续集成过程中:
- 使用 WordPress 导出工具生成真实的测试数据,并将其存储在 Git 存储库中。
- 使用 DevKinsta 启动具有新 WordPress 实例的 Web 服务器。
- 使用 WP-CLI 将测试数据导入 WordPress 站点(DevKinsta 可以通过 WP-CLI 操作)。
- 在 PHPUnit 中创建一个单元测试,让 Guzzle 对 Web 服务器执行 HTTP 请求,以验证您的响应内容和标头。
WP-CLI 的主要功能是:
- 允许通过命令行界面对 WordPress 实例远程执行命令
- 可使用其他工具进行扩展
- 增强测试堆栈的功能
- 允许过程完全自动化
9. XDebug
XDebug 是 PHP 的一个扩展,它提供了一系列功能来改善 PHP 开发体验,包括调试、改进 PHP 的错误报告、跟踪、分析和代码覆盖率分析。
XDebug 不会帮助您测试您的代码,但会帮助您找出错误所在。 将 XDebug 与 PHPUnit 结合起来特别有效:如果某个测试失败并且找不到问题的根源,则可以使用 XDebug 在单元测试代码中添加断点。 再次运行单元测试时,PHP 脚本将在每个断点处暂停,允许您检查当前执行状态(调用堆栈、属性和对象值等)并尝试发现问题所在。
XDebug 的主要功能是:
- 与流行的 PHP 编辑器集成,包括 VS Code、PHPStorm 和 Sublime
- 分析每个函数调用花费了多少时间以及消耗了多少内存
- 比简单地使用
var_dump
调试代码要强大得多 - 允许在断点暂停时动态修改变量值
10. PHP斯坦
PHPStan 是 PHP 的静态分析工具,旨在在编写测试之前发现代码中的错误。
PHPStan 的目标是减少开发人员必须编写的测试数量。 该工具是测试堆栈中第一个执行的工具,可以抢先捕获尽可能多的错误。 只有那些无法从静态分析中推断出来的错误(例如那些有缺陷的逻辑)必须通过单元测试进行验证。
PHPStan 通过扫描整个代码库并寻找不匹配来工作。 例如,返回浮点数的函数的响应值不能分配给整数类型的函数参数。 每当代码包含这样的事件时,这就是一个潜在的错误,PHPStan 会在开发阶段提醒您,就在您编写应用程序代码时。
PHPStan 的主要功能是:
- 现有持续集成过程中的自动化和集成
- 定位许多棘手的错误,例如类型不匹配
- 扫描整个代码库,在很少执行的代码部分中发现错误
- 以越来越复杂的层次组织,以允许逐渐集成
- 为最流行的 PHP 框架和 CMS 提供扩展,包括 Symfony、Laravel、Doctrine、Nette 和 WordPress
概括
在生产环境中让错误潜入您的应用程序的成本可能会损害您的声誉和收入,因此您必须在它们影响您的用户之前尝试将其根除。
在复杂的应用程序中,几乎不可能 100% 确信它不会包含错误。 因此,您必须设置一个流程,以便在初始开发周期中找到并删除尽可能多的错误。
使用精心设计的测试工具包,您可以极大地减少应用程序出现意外行为的可能性。 开源社区已经创建并提供了大量工具来测试应用程序的不同方面,您可以而且应该这样做! — 利用来产生一个全面的测试堆栈。
在本文中,我们回顾了 10 种工具来帮助您实现在 WordPress 插件中测试 PHP 代码的目标。
您在最近的项目中使用了哪些工具? 在下面的评论部分让我们知道您用它构建了什么!