91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何測試PHP腳本

發布時間:2021-09-02 14:03:53 來源:億速云 閱讀:157 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何測試PHP腳本”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何測試PHP腳本”這篇文章吧。

一、常用測試示例

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

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

在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
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;
  }
   
  ...
}

這是我們的測試代碼:

 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腳本進行重構,以消除冗余代碼。

當我們的測試完成后,可以將handleRequest()的內容替換成真正的邏輯代碼。假如你要寫很多這樣的測試腳本,你可以寫一個通用的測試對象,以滿足你的測試需要。


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

在PHP領域,單元測試的工具主要有PHPUNIT,PHPUNIT2和SimpleTest三種。其中PHPUNIT在功能上很簡單,不算完善;PHPUNIT2是專門為PHP5寫的單元測試工具,在結構和功能上都向Junit看齊;而SimpleTest則是一套非常實用的測試工具,其中的webTest支持對web程序界面的測試,是Easy最為推薦的一款測試工具。在本文中,我們選擇SimpleTest進行介紹。

相關知識:PHPUNIT2也是一款很好的工具,尤其是架構上有很多值得圈點之處,希望將來能有機會在專門的文章中和大家分享。

SimpleTest:就是這么Simple

安裝SimpleTest很簡單,上sf.net上下載一個源碼包,然后解壓到web目錄下就可以使用了,這里就不多說。

下面我們先來看個例子:編寫一個測試,檢查一個網站是否可以訪問。

首先我們引入要用到的文件:

代碼列表:

require_once("../simpletest/unit_tester.php");
require_once("../simpletest/web_tester.php");
require_once("../simpletest/reporter.php");

然后我們創建一個測試類:

代碼列表:

class TestOfSite extends WebTestCase
{
  function TestOfSite()
  {
    $this->WebTestCase("測試");
  }

  function testSite()
  {
    $this->get("http://howgo.net/prettyface/display.php");
    $this->assertTitle(".: facebook :.");
  }
}

首先我們擴展了webTestCase類,這樣我們就可以自動獲得測試web的能力,然后在構造函數中我們直接使用基類的,只是把標題傳給它。接著我們就該寫測試方法了,測試方法都是以‘test"開頭的,用以識別在我們運行測試的時候,類中哪些方法要進行調用。

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

代碼列表:

$test = &new TestOfSite();
$test->run(new HtmlReporter());

下邊是運行結果:

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

到這里一個簡單的測試就算完成了。

實戰演習 – 一個Login測試

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

代碼列表:

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腳本”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

临邑县| 怀远县| 鄂托克旗| 广东省| 濮阳县| 安图县| 乌兰浩特市| 朔州市| 东兴市| 鄂托克旗| 永川市| 台安县| 永州市| 临夏县| 绥芬河市| 阳山县| 堆龙德庆县| 万山特区| 庆阳市| 阳泉市| 明星| 温宿县| 陇南市| 疏附县| 隆昌县| 罗平县| 渝北区| 靖安县| 陵川县| 镇康县| 资溪县| 丰原市| 昭觉县| 辽阳市| 宣威市| 德州市| 石林| 宜黄县| 开阳县| 阿拉善右旗| 喀喇|