php測試教程,舉例詳解PHP指令碼的測試方法

2021-10-25 21:17:42 字數 2060 閱讀 9821

一、常用測試示例

我們經常會遇到這種情況:將一些沒有經過任何測試的遺留**進行重新編寫測試,甚至這些**還是用物件導向寫的。要對這樣的**進行測試,我的建議是把**分解成塊,這樣就容易測試了。

然而,這些遺留**並不是那麼好重構的,比如:測試前,你不能在把**重新編寫,這是為了避免影響原有程式,當然也不好進行單元測試。

在php程式中,通常有一部分**是寫在幾個index.php和script.php檔案中的,這些.php檔案存放在幾個不同的資料夾裡。如果不找到它們的入口點,是無法直接由web伺服器訪問的。

測試副本

要測試乙個php指令碼,我們需要模擬乙個http請求,並檢查返回的響應(response)是否等於預期值。這裡需要注意的是模擬乙個請求,要定義response和request,這不僅僅是內容(content)的不同,而且他們的頭資訊(header)也是不同的。

此外,如果我們想要測試乙個運算元據的事務指令碼,我們要確保不讓它去連線真正的資料庫或應用程式的其餘部分。

在現實中,通常沒有人會直接拿原有的php指令碼進行重寫測試。因為怕把**弄得不可恢復。我建議使用php指令碼的副本,這樣我們就可以將php**進行一些小手術了。

如何將**進行最小修改:刪除include和require語句(如果它們沒有被用到),並且修改內部函式的呼叫方式,例如:將header()寫成$object->header()。

最後,我們來測試這個事務指令碼。測試完後,我們可以從副本指令碼中提取出它們,並把它們放入新指令碼檔案中。

具體步驟

一、模擬乙個http請求並重新定義變數$_get和$_post,還要修改$_server的header。

二、獲取請求響應,response的body可以通過ob_start()和ob_get_clean()捕獲,它可以收集每乙個用echo()或以<?php標籤輸出的buffer (緩衝內容)。

注意:輸出緩衝支援在php多個級別的巢狀,所以在大多數情況下,都可以捕獲到,即使指令碼在使用ob_*呼叫本身。

三、測試指令碼應包含事務指令碼的內部方法,因此在這個指令碼範圍內的方法都可以被呼叫。例如:

1.指令碼所需的變數可以被定義為區域性變數封裝起來,如$connection作為乙個資料庫連線。

2.不是原本php的內建函式,應該加上物件來呼叫,如:header()寫成$this->header()。

具體**

這就是我們要測試的事務指令碼物件,具體到指令碼中,我們還需要封裝:

這是我們的測試**:

測試副本只是暫時的!它讓我們編寫的測試不會改變。最終,我們要將已經通過測試的php指令碼進行重構,以消除冗餘**。

當我們的測試完成後,可以將handlerequest()的內容替換成真正的邏輯**。假如你要寫很多這樣的測試指令碼,你可以寫乙個通用的測試物件,以滿足你的測試需要。

二、php開發者的單元測試工具包

在php領域,單元測試的工具主要有phpunit,phpunit2和******test三種。其中phpunit在功能上很簡單,不算完善;phpunit2是專門為php5寫的單元測試工具,在結構和功能上都向junit看齊;而******test則是一套非常實用的測試工具,其中的webtest支援對web程式介面的測試,是easy最為推薦的一款測試工具。在本文中,我們選擇******test進行介紹。

******test:就是這麼******

首先我們引入要用到的檔案:

**列表:

然後我們建立乙個測試類:

**列表:

首先我們擴充套件了webtestcase類,這樣我們就可以自動獲得測試web的能力,然後在建構函式中我們直接使用基類的,只是把標題傳給它。接著我們就該寫測試方法了,測試方法都是以『test"開頭的,用以識別在我們執行測試的時候,類中哪些方法要進行呼叫。

而$this->get將取得網頁的內容,我們指定它的標題為 ".: facebook :.", 接著我們要做的就是例項化這個類的物件,並執行它。

**列表:

下邊是執行結果:

如果測試出錯則會出現下邊的介面:

到這裡乙個簡單的測試就算完成了。

實戰演習 – 乙個login測試

下面我們進入實戰,在這個基礎上完成乙個login的測試。這次我們先貼出完整的**:

**列表:

PHP除錯工具xdebug安裝除錯教程

先發鏈結吧 說到php 除錯,對於有經驗的phper,通過echo print r var dump函式,或php開發工具zend studio editplus可解決大部分問題,但是對於php入門學習的童鞋來說有一定的難度,而且僅僅通過上述這些php除錯手段,也很難準確發現php效能方面的問題,x...

PHP 命名空間詳解 以ThinkPHP舉例

摘要 學習tp,要涉及到php命名空間的問題,特將學習過程記錄如下,給同樣入門tp的人鋪點路。寫在最前面的廢話,學習php,從最初在乙個指令碼裡寫出echo hello world 到後來需要用include require引入檔案來完成中大型專案,當include的檔案相當多的時候,函式 類 常量...

php教程curl,PHP使用CURL詳解講解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl傳...