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