《PHP應用:舉例詳解PHP腳本的測試方法》要點:
本文介紹了PHP應用:舉例詳解PHP腳本的測試方法,希望對您有用。如果有疑問,可以聯系我們。
PHP進修一、常用測試示例
PHP學習我們常常會遇到這種情況:將一些沒有經過任何測試的遺留代碼進行重新編寫測試,甚至這些代碼還是用面向對象寫的.要對這樣的代碼進行測試,我的建議是把代碼分解成塊,這樣就容易測試了.
PHP學習然而,這些遺留代碼并不是那么好重構的,好比:測試前,你不能在把代碼重新編寫,這是為了避免影響原有程序,當然也不好進行單元測試.
PHP學習在PHP程序中,通常有一部分代碼是寫在幾個index.php和script.php文件中的,這些.php文件存放在幾個不同的文件夾里.如果不找到它們的入口點,是無法直接由Web服務器拜訪的.
PHP進修測試副本
PHP學習要測試一個PHP腳本,我們需要模擬一個HTTP哀求,并檢查返回的響應(response)是否等于預期值.這里需要注意的是模擬一個哀求,要定義response和request,這不僅僅是內容(content)的不同,而且他們的頭信息(header)也是不同的.
PHP學習此外,如果我們想要測試一個操作數據的事務腳本,我們要確保不讓它去連接真正的數據庫或應用程序的別的部分.
PHP學習在現實中,通常沒有人會直接拿原有的PHP腳本進行重寫測試.因為怕把代碼弄得弗成恢復.我建議使用PHP腳本的副本,這樣我們就可以將PHP代碼進行一些小手術了.
PHP學習如何將代碼進行最小修改:刪除include和require語句(如果它們沒有被用到),而且修改內部函數的調用方式,例如:將header()寫成$object->header().
PHP學習最后,我們來測試這個事務劇本.測試完后,我們可以從副本劇本中提取出它們,并把它們放入新劇本文件中.
PHP學習具體步調
PHP學習一、模擬一個HTTP哀求并重新定義變量$_GET和$_POST,還要修改$_SERVER的header.
PHP學習二、獲取哀求響應,response的body可以通過ob_start()和ob_get_clean()捕獲,它可以收集每一個用echo()或以<?php標簽輸出的buffer(緩沖內容).
PHP學習注意:輸出緩沖支持在PHP多個級別的嵌套,所以在大多數情況下,都可以捕獲到,即使腳本在使用ob_*調用自己.
PHP學習三、測試腳本應包含事務腳本的內部辦法,因此在這個腳本范圍內的辦法都可以被調用.例如:
1.腳本所需的變量可以被定義為局部變量封裝起來,如$connection作為一個數據庫連接.
2.不是原本PHP的內置函數,應該加上對象來調用,如:header()寫成$this->header().
PHP學習詳細代碼
PHP學習這就是我們要測試的事務腳本對象,具體到腳本中,我們還必要封裝:
PHP進修?
PHP進修
<?php
class ForumPosting
{
private $headers = array();
public function handleRequest($postRequest)
{
$_POST = $postRequest;
$connection = $this->getAConnection();
ob_start();
include 'forum/post_new_copy.php';
$content = ob_get_clean();
return array(
'content' => $content,
'headers' => $this->headers
);
}
private function header($headerLine)
{
$this->headers[] = $headerLine;
}
...
}
PHP進修這是我們的測試代碼:
PHP進修
public function testANewPostIsCreated()
{
$action = new ForumPosting();
$response = $action->handleRequest(array(
'id_thread' => 42,
'text' => 'Hello, world',
...
));
$this->assertEquals('...', $response['content']);
$this->assertContains('Content-type: text/html', $response['headers']);
}
PHP進修?
PHP學習測試副本只是暫時的!它讓我們編寫的測試不會改變.最終,我們要將已經通過測試的PHP腳本進行重構,以打消冗余代碼.
PHP學習當我們的測試完成后,可以將handleRequest()的內容替換成真正的邏輯代碼.假如你要寫很多這樣的測試腳本,你可以寫一個通用的測試對象,以滿足你的測試必要.
PHP學習
PHP學習
二、PHP開發者的單位測試工具包
PHP學習在PHP領域,單元測試的工具主要有PHPUNIT,PHPUNIT2和SimpleTest三種.其中PHPUNIT在功能上很簡單,不算完善;PHPUNIT2是專門為PHP5寫的單元測試工具,在結構和功能上都向Junit看齊;而SimpleTest則是一套非常實用的測試工具,其中的webTest支持對web程序界面的測試,是Easy最為保舉的一款測試工具.在本文中,我們選擇SimpleTest進行介紹.
PHP學習相關知識:PHPUNIT2也是一款很好的工具,尤其是架構上有很多值得圈點之處,希望將來能有機會在專門的文章中和年夜家分享.
PHP學習SimpleTest:便是這么Simple
PHP學習安裝SimpleTest很簡單,上sf.net上下載一個源碼包,然后解壓到web目次下就可以使用了,這里就不多說.
PHP學習下面我們先來看個例子:編寫一個測試,檢查一個網站是否可以拜訪.
PHP學習起首我們引入要用到的文件:
PHP進修代碼列表:
PHP學習
require_once("../simpletest/unit_tester.php");
require_once("../simpletest/web_tester.php");
require_once("../simpletest/reporter.php");
PHP學習然后我們創立一個測試類:
PHP進修代碼列表:
PHP學習
class TestOfSite extends WebTestCase
{
function TestOfSite()
{
$this->WebTestCase("測試");
}
function testSite()
{
$this->get("http://howgo.net/prettyface/display.php");
$this->assertTitle(".: facebook :.");
}
}
PHP學習首先我們擴展了webTestCase類,這樣我們就可以自動獲得測試web的能力,然后在構造函數中我們直接使用基類的,只是把標題傳給它.接著我們就該寫測試辦法了,測試辦法都是以‘test"開頭的,用以識別在我們運行測試的時候,類中哪些辦法要進行調用.
PHP學習而$this->get將取得網頁的內容,我們指定它的標題為 ".: facebook :.", 接著我們要做的便是實例化這個類的對象,并運行它.
PHP進修代碼列表:
PHP學習
$test = &new TestOfSite();
$test->run(new HtmlReporter());
PHP學習下邊是運行成果:
PHP學習如果測試出錯則會呈現下邊的界面:
PHP進修到這里一個簡單的測試就算完成了.
PHP學習實戰練習 C 一個Login測試
PHP學習下面我們進入實戰,在這個根基上完成一個login的測試.這次我們先貼出完整的代碼:
PHP進修代碼列表:
PHP學習
require_once("../simpletest/unit_tester.php");
require_once("../simpletest/web_tester.php");
require_once("../simpletest/reporter.php");
class TestOfLogin extends WebTestCase
{
function TestOfLogin()
{
$this->WebTestCase("Login測試");
}
function testLoginOk()
{
// 取得頁面
$this->get("http://howgo.net/prettyface/login.php");
// 添加測試表項
$this->setField("name","Easy");
$this->setField("pass","******");
// 提交
$this->clickSubmit("提交");
// 察看提交后返回頁面是否正確
$this->assertWantedPattern("/成功登錄/");
// 點擊頁面鏈接
$this->clickLink("點擊這里進入管理頁面");
// 察看指定頁面題目和關鍵內容
$this->assertTitle("ADMINCP");
$this->assertWantedPattern("/請選擇要進行的任務/");
// 退出登陸
$this->clickLink("退出管理");
$this->clickLink
}
}
PHP學習
?
PHP進修?
維易PHP培訓學院每天發布《PHP應用:舉例詳解PHP腳本的測試方法》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8934.html