问题描述
大家好,
我想听听有什么其他人向客户提供复杂的 non-blog 解决方案作为平台,用于自动回归测试?
对于不熟悉”regression testing” 这一术语的人来说,维基百科定义为:
Regression testing is any type of software testing that seeks to uncover software errors after changes to the program (e.g. bugfixes or new functionality) have been made, by retesting the program. The intent of regression testing is to assure that a change, such as a bugfix, did not introduce new bugs.
更有说服力的维基百科说现在正是我在一个项目上遇到的以下内容:
Experience has shown that as software is fixed, emergence of new and/or reemergence of old faults is quite common. Sometimes reemergence occurs because a fix gets lost through poor revision control practices (or simple human error in revision control). Often, a fix for a problem will be “fragile” in that it fixes the problem in the narrow case where it was first observed but not in more general cases which may arise over the lifetime of the software. Frequently, a fix for a problem in one area inadvertently causes a software bug in another area. Finally, it is often the case that when some feature is redesigned, some of the same mistakes that were made in the original implementation of the feature were made in the redesign.
随着行动和过滤器的全球性质,我发现复杂性开始缓慢增加,因为我添加了更多的 client-requested 功能,并且变得很难得到一个复杂的插件稳定,特别是如果它使用大量的调用 WP_Query
并更新数据库很多。
我心中的解决方案是使用一系列”test cases” 来建立回归测试,以组成一个 「测试套件」 。在概念上,当您测试 HTTP GET 请求的 HTML 输出时,并不困难。但是当您必须通过管理控制台登录并/或测试 jQuery 交互来测试时,会变得更复杂一点。
我把这个设置为一个社区 wiki,希望我们能够在这里收集最佳实践,但是如果任何其他 WordPress 专业人士使用,我真的很想听到进程。
最佳解决方案
如果 WP 测试套件没有被破坏,并且如果 WP 被设计和写入,实际上可以被正确测试,那么 PHPUnit 将会被考虑。 😉
更严重的是,您可以使用单元测试等从功能角度测试您想要的插件。问题是,这些测试不能保证他们会抓住由 WP 升级引入的微妙机会,更别说一旦插入到定制的 WP 安装中,它们将继续工作。
我见过的丰富多彩的事情发生了:
-
WP API 的微妙变化会影响插件的功能,例如你用来获取术语 ID 的钩子,现在正在获得一个术语分类标识。 (很有可能您的测试条件方便地具有相同的 ID) 。
-
WP API 的微妙变化导致您收到
WP_Error
对象,而不是以前预期的false
值作为输入。 -
您的插件是从 mu-plugins 文件夹中添加的,导致一个微妙的代码流。
-
您的插件工作正常,直到 memcached 或其他一些持久性存储已启用。
-
你的插件工作正常,直到被鄙视的 switch_to_blog() 被调用。
-
一个插件在被调用时改变它驻留的钩子,并且不知不觉中断它作为副作用。
-
一个插件 (un?) 明白地将您的输入或输出数据混合在一起,即使您没有出现故障,事情看起来也会破裂。
我可以扩展列表,但这些将是破坏我自己的插件的关键项目。这两个项目可以说是单元测试可以收获的。接下来的两个,如果你足够耐心,但我认为 WP 不应该改变事情发生时的工作方式。没有数量的测试可以解决 switch_to_blog() 的错误实施。而最后两个是无可置疑的。
哦,还有… 甚至没有让我开始对附件,自动草稿,修订,菜单项的冲击,以及什么不是最后存储在帖子表中。
祝你好运… :-)
次佳解决方案
你应该强烈地考虑 Selenium 。
它允许您记录操作 (例如,将数据输入表单,单击链接),然后可以执行断言。它还与 PHPUnit 集成。我强烈建议您查看两分钟演示。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。