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