我想听听有哪些其他人以WordPress为平台向客户提供复杂的非博客解决方案,他们将其用于自动化回归测试吗?
对于那些不熟悉术语“回归测试”的人,Wikipedia将其定义为:
回归测试是试图发现软件错误的任何类型的软件测试。通过重新测试程序对程序进行更改(例如,错误修正或新功能)之后。回归测试的目的是确保更改(例如错误修正)不会引入新的错误。
告诉维基百科,以下内容正是我所经历的现在的一个项目:
经验表明,随着软件的修复,新故障的出现和/或旧故障的再次出现是很普遍的。有时会出现重新出现的情况,因为修订是由于不良的修订控制做法(或修订控制中的简单人为错误)而丢失的。通常,解决问题的方法将是“脆弱的”,因为它可以在首次发现问题的狭窄情况下解决问题,而在软件的整个生命周期内可能会出现的更一般情况下,则无法解决问题。通常,对一个区域中的问题的修复无意间导致了另一区域中的软件错误。最后,通常情况是,在重新设计某些功能时,在重新设计时也会犯一些与该功能的原始实现相同的错误。
操作和过滤器的性质我发现,随着我添加更多客户端请求的功能,复杂性开始增加,并且很难获得稳定的复杂插件,尤其是当它使用大量对
WP_Query
的调用并大量更新数据库时。 br /> 我认为解决方案是使用一系列“测试用例”设置回归测试,以构成“测试套件”。从概念上讲,测试HTTP GET请求的HTML输出并不难。但是,当您必须通过管理控制台登录和/或测试jQuery交互时必须进行测试时,事情变得更加复杂。
我将其设置为社区Wiki,希望我们可以在这里收集最佳做法,但是如果有其他WordPress专业人员正在使用,我真的很想听听流程。
#1 楼
如果WP测试套件没有那么坏,并且设计和编写WP时可以实际对其进行适当的测试,那么PHPUnit就会浮现在脑海。 ;-)更严重的是,您可以使用单元测试等从功能的角度测试所有想要的插件。问题在于这些测试不能保证会抓住WP升级带来的微妙机会,更不用说一旦插入自定义的WP安装中,它们就可以继续工作。
我见过的事情发生了:
WP API的细微变化会影响您插件的功能,例如您所使用的钩子通常用来获取术语ID,而现在它正在获取术语分类ID。 (很可能您的测试词可以方便地使用相同的ID)。
WP API中的细微变化会导致您收到
WP_Error
对象,而不是先前期望的false
对象作为错误的输入。您的插件是从mu-plugins文件夹中添加的,导致代码流略有不同。
您的插件可以正常工作,直到启用了memcached或其他持久性存储。
您的插件可以正常工作,直到被鄙视为止switch_to_blog()被调用。
一个插件在被调用时更改了它所驻留的钩子,并在不知不觉中中断了它的副作用。
一个插件(un?)故意弄乱您的输入或输出数据到了即使您没有错的情况下看起来也很糟糕的地步。
我可以不停地扩展列表,但是那些将是破坏我自己的插件的关键项。可以说,这两项在单元测试中都是可以捕获的。如果您足够耐心的话,接下来的两个也是,但是我认为WP不应在事情发生时改变工作方式。 switch_to_blog()的错误实现不会进行大量测试。最后两个是无法检验的。
哦,而且...我什至不让我开始着手处理附件,自动草稿,修订,菜单项以及最终存储在posts表中的内容。
..祝你好运.. 。:-)
评论
好的答案,谢谢您涵盖的所有细节。 FWIW我在寻找“回归”测试而不是“单元”测试。我知道有很多重叠,但是我目前最大的问题是验证网站是否不会中断。是的,对插件进行单元测试可以解决大多数问题,但是要对单元测试进行全面介绍需要更多的时间和精力(这意味着我可能不会获得全面介绍),而对整页测试的要求要低得多。
– MikeSchinkel
2010年12月2日,12:20
实际上,请注意,某些框架中有一些工具(仅举两个,即Symfony2和Li3),可以使用虚拟浏览器测试实际站点。有问题的组件可用于其他用途。因此,您实际上可以操纵站点的管理屏幕,并验证您所做的工作是否具有预期的结果。
–丹尼斯·伯纳迪(Denis de Bernardy)
2010年12月2日,12:49
#2 楼
您应该强烈考虑硒。它可以记录动作(例如,将数据输入表单,单击链接),然后可以执行断言。它还与PHPUnit集成。我强烈建议您查看两分钟的演示。
评论
感谢您的建议,我之前已经听说过。您是否实际用于WordPress项目?只是好奇。
– MikeSchinkel
2010-12-04 at 4:31
是。我已将其用于测试正在使用的插件。在以前的生活中,我们用它来测试EDC应用以进行临床研究。
– Ethan Seifert
2010-12-04 18:47
#3 楼
硒可能是有用的,但我认为在现代,您会发现Codeception更好,更易于使用。对于最简单的视觉回归测试,它甚至具有扩展功能,可以获取屏幕截图并自动为您进行比较。当然,Codeception WebDriver测试可以走得更远并执行功能回归测试。您可以填写并提交表格,单击网站上的按钮和链接,执行任何JS等。您可以在测试中使用Firefox或Chrome这样的真实浏览器,也可以使用PhantomJS进行无头测试。这意味着,如果您愿意,甚至可以在Travis CI上为其插件运行WebDriver测试,作为其构建过程的一部分。
甚至还有几个特定于WordPress的库可以帮助您入门:
WP浏览器
WP Codeception
评论
硒和Codeception并非唯一。您可以使用WP浏览器来驱动Selenium [驱动实际的浏览器,如Chrome],Phantom [这是具有JS支持的非GUI浏览器],甚至是PHPBrowser,它是哑卷曲浏览器[非常快,但没有JS。即API测试]。 WP浏览器可以驱动其中的任何一个。
–吉姆·马奎尔(Jim Maguire)
17年8月8日在4:32
评论
我假设您是在谈论测试自己的代码(主题/插件)?当您创建新代码或更新“环境”(WP,其他插件)时?或两者?我认为Pro网站站长还可以就如何测试Web应用程序(硒和其他东西)提供很好的建议-交叉发布是个好主意吗?@Jan Fabry-是的,测试我自己的代码。关于交叉发布的好主意,我会尽快进行。