10 個 WordPress 插件的 PHP 測試工具
已發表: 2022-08-05沒有軟件是沒有錯誤的。 這是適用於每種編程語言和每種應用程序的公理。
當這些錯誤在您的網站中部署在生產環境中時,您可能會遭受不同嚴重程度的不利後果。 這些是一些例子,從煩人到經濟破壞:
- 輕度:用戶無法點擊斷開的鏈接。
- 嚴重:聯繫表單的“提交”按鈕不起作用,用戶只有在撰寫完他們的消息後才會發現。
- 嚴重:支付網關配置不正確,導致用戶無法在您的電子商務商店購買產品,從而放棄該網站。
沒有任何一種工具足以處理從所有不同可能角度測試應用程序的所有方面。 事實上,除了發現錯誤之外,執行額外的測試來驗證應用程序的其他功能也很重要,例如:
- 可訪問性和可用性
- 可接受的性能
- 交通和負載處理
在本文中,我們將回顧開源社區創建的 10 個工具,這些工具可以幫助構建用於測試 WordPress 插件中的 PHP 代碼的堆棧。 其中一些工具是專門為測試 PHP 代碼而設計的; 其他用於測試 WordPress 代碼; 並創建了一些其他工具來處理一些對測試有用的通用功能。
1.DevKinsta

DevKinsta 是 WordPress 網站的本地開發套件。 只需提供一些基本詳細信息,即可立即安裝 WordPress 站點的本地實例,並且它捆綁了幾個有用的開發工具,如電子郵件收件箱、數據庫管理器和日誌記錄,以便於排除故障。
DevKinsta 通常由開發人員和設計人員在創建他們的 WordPress 主題和插件時使用。 但它也可以用作執行集成和功能測試的本地 Web 服務器。 這是與 HTTP 工具一起完成的,該工具可幫助您驗證響應內容和標頭是否正確。
DevKinsta 的主要功能是:
- 輕鬆啟動新的 WordPress 環境並在不再需要時將其刪除
- 允許針對任何受支持的 PHP 和 WordPress 版本以及它們的任意組合進行測試
- 與 MyKinsta 無縫集成,用戶可以在其中創建其站點和數據的外部備份
2.PHP單元

PHPUnit 是一個面向程序員的 PHP 測試框架。 它是在 PHP 代碼中執行單元測試的最流行的框架,目的是驗證源代碼的各個單元。
PHPUnit 測試允許開發人員在開發週期內儘早發現問題,有助於確保沒有引入代碼回歸(即對某些代碼的更改不會在其他地方引起問題)。
PHPUnit 的主要功能是:
- 新功能測試
- 新重構的代碼驗證
- 可以在選擇的持續集成過程中完全自動化和執行
- 調試
- 通過功能調用和約束自動記錄預期用途
- 允許測試驅動開發 (TDD) 方法,其中開發人員首先創建第一個測試,然後是功能
3.腦猴

Brain Monkey 是 PHP 和 WordPress 的測試工具。 它提供了與框架無關的工具,允許您重新定義 PHP 方法並測試任何 PHP 應用程序的行為。 它還提供了專門用於測試 WordPress 代碼的工具。
Brain Monkey 的主要特點是:
- 允許單元測試與外部的、未加載的庫進行交互
- 允許調用 WordPress 函數而無需加載 WordPress 環境
- 可以斷言 WordPress 函數(例如
add_filter
或do_action
)按預期調用功能
4. 大腦偽裝者

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 是一個簡單而靈活的 PHP 模擬對象框架,旨在與 PHPUnit、PHPSpec 或任何其他單元測試框架一起使用。 它提供了一個測試雙重框架,能夠使用人類可讀的領域特定語言 (DSL) 定義所有可能的對像操作和交互。

Mockery 的主要功能是:
- 支持靈活生成模擬對象和存根(為測試期間的特定調用提供預定義的預設答案)
- 增強 PHPUnit 的測試隔離能力
- 靈活的 API 來表達模擬期望,盡可能地模仿自然語言描述(例如
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - 使用內存中的模擬對象進行單元測試,以避免需要訪問較慢的系統(例如數據庫、文件系統或外部服務)
- 可以模擬確定性和非確定性行為
6. WordPress 原生導出工具

WordPress 的原生導出工具將網站的 WordPress 數據作為 XML 文件下載到您的設備,包括帖子、頁面、自定義帖子類型、評論、自定義字段、類別、標籤、自定義分類、用戶和媒體。 XML 文件具有可導入任何 WordPress 站點的自定義格式(稱為 WordPress eXtended RSS 或 WXR 文件)。
此工具不是專門為測試而設計的。 但是,它的用處在於能夠創建包含合適數據集的 WordPress 數據庫的快照,然後可以將其用於測試。 這意味著可以將包含真實數據的生產中的 WordPress 站點導出並導入到開發或暫存實例中以測試新功能。
WordPress 導出工具的主要功能是:
- 使用實際的 WordPress 站點創建測試數據
- 整個數據庫的可共享導出文件
- 對集成和單元測試都很有用
7. 狂飲

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 是 WordPress 的命令行界面。 有了它,您無需使用網絡瀏覽器即可更新插件、配置多站點安裝等等。
WP-CLI 並不是專門的測試工具,但測試是其眾多用例之一。 例如,在啟動新的開發 Web 服務器後,您可以執行包含 WP-CLI 命令的 bash 腳本,將測試數據導入 WordPress 站點,創建具有適當角色和功能的用戶,安裝所需的第三方插件,以及其他此類任務。
由於帶有 WP-CLI 命令的腳本可以存儲在您的 Git 存儲庫中,因此執行集成測試的過程可以自動化並集成到您的持續集成過程中:
- 使用 WordPress 導出工俱生成真實的測試數據,並將其存儲在 Git 存儲庫中。
- 使用 DevKinsta 啟動具有新 WordPress 實例的 Web 服務器。
- 使用 WP-CLI 將測試數據導入 WordPress 站點(DevKinsta 可以通過 WP-CLI 操作)。
- 在 PHPUnit 中創建一個單元測試,讓 Guzzle 對 Web 服務器執行 HTTP 請求,以驗證您的響應內容和標頭。
WP-CLI 的主要功能是:
- 允許通過命令行界面對 WordPress 實例遠程執行命令
- 可使用其他工具進行擴展
- 增強測試堆棧的功能
- 允許過程完全自動化
9. XDebug

XDebug 是 PHP 的一個擴展,它提供了一系列功能來改善 PHP 開發體驗,包括調試、改進 PHP 的錯誤報告、跟踪、分析和代碼覆蓋率分析。
XDebug 不會幫助您測試您的代碼,但會幫助您找出錯誤所在。 將 XDebug 與 PHPUnit 結合起來特別有效:如果某個測試失敗並且找不到問題的根源,則可以使用 XDebug 在單元測試代碼中添加斷點。 再次運行單元測試時,PHP 腳本將在每個斷點處暫停,允許您檢查當前執行狀態(調用堆棧、屬性和對象值等)並嘗試發現問題所在。
XDebug 的主要功能是:
- 與流行的 PHP 編輯器集成,包括 VS Code、PHPStorm 和 Sublime
- 分析每個函數調用花費了多少時間以及消耗了多少內存
- 比簡單地使用
var_dump
調試代碼要強大得多 - 允許在斷點暫停時動態修改變量值
10. PHP斯坦

PHPStan 是 PHP 的靜態分析工具,旨在在編寫測試之前發現代碼中的錯誤。
PHPStan 的目標是減少開發人員必須編寫的測試數量。 該工具是測試堆棧中第一個執行的工具,可以搶先捕獲盡可能多的錯誤。 只有那些無法從靜態分析中推斷出來的錯誤(例如那些有缺陷的邏輯)必須通過單元測試進行驗證。
PHPStan 通過掃描整個代碼庫並尋找不匹配來工作。 例如,返回浮點數的函數的響應值不能分配給整數類型的函數參數。 每當代碼包含這樣的事件時,這就是一個潛在的錯誤,PHPStan 會在開發階段提醒您,就在您編寫應用程序代碼時。
PHPStan 的主要功能是:
- 現有持續集成過程中的自動化和集成
- 定位許多棘手的錯誤,例如類型不匹配
- 掃描整個代碼庫,在很少執行的代碼部分中發現錯誤
- 以越來越複雜的層次組織,以允許逐漸集成
- 為最流行的 PHP 框架和 CMS 提供擴展,包括 Symfony、Laravel、Doctrine、Nette 和 WordPress
概括
在生產環境中讓錯誤潛入您的應用程序的成本可能會損害您的聲譽和收入,因此您必須在它們影響您的用戶之前嘗試將其根除。
在復雜的應用程序中,幾乎不可能 100% 確信它不會包含錯誤。 因此,您必須設置一個流程,以便在初始開發週期中找到並刪除盡可能多的錯誤。
使用精心設計的測試工具包,您可以極大地減少應用程序出現意外行為的可能性。 開源社區已經創建並提供了大量工具來測試應用程序的不同方面,您可以而且應該這樣做! — 利用來產生一個全面的測試堆棧。
在本文中,我們回顧了 10 種工具來幫助您實現在 WordPress 插件中測試 PHP 代碼的目標。
您在最近的項目中使用了哪些工具? 在下面的評論部分讓我們知道您用它構建了什麼!