問題描述

大家好,

我想聽聽有什麼其他人向客户提供複雜的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。