PHP 行為測試載入器 Codeception (介紹)

來源:互聯網
上載者:User

標籤:

原文地址:https://phphub.org/topics/25

Codeception 簡介

Codeception 簡單來說, 分為以下幾種測試

  • Acceptance Tests 驗收測試
  • Functional Tests 功能測試
  • Unit Tests 單元測試

接下來我們來一一介紹每一種測試的優缺點.

Acceptance Tests 驗收測試

我們先設想這樣一個情境:當技術人員開發完畢, 其客戶, 產品經理, 或者是測試人員, 他們怎麼確定產品的可用性? 一般情況下, 他們都是執行以下幾個步驟進行測試:

  • 開啟瀏覽器;
  • 輸入 url;
  • 看到一些資訊, 並確定了這個頁面是可用的;
  • 點擊某個 url;
  • 填寫表單, 並提交表單, 看到了某些資訊, 並確定此功能是可用的

這種測試方式我們稱之為 手動測試, 或 人工測試, 與其相反的是 自動化測試, Codeception 的 Acceptance Tests 會利用瀏覽器的編程介面, 做到以上的 人工測試 涉及到的步驟完全自動化, 大大節省了人工成本.

先貼代碼

<?php$I = new AcceptanceTester($scenario);$I->amOnPage(‘/‘);$I->click(‘Sign Up‘);$I->submitForm(‘#signup‘, array(‘username‘ => ‘MilesDavis‘, ‘email‘ => ‘[email protected]‘));$I->see(‘Thank you for Signing Up!‘);
優點
  • 可用來測試任何網站;
  • 完全基於瀏覽器, 可以測試 Javascript 甚至是 ajax 請求;
  • 可以把運行狀態給 產品經理 或者 客戶看, 讓人信服;
  • 不需要多餘的配置, 對 App 源碼修改要求最少, 代碼適應性好, 可以當成整個應用來測試, 不在乎內部實現.
缺點
  • 測試速度緩慢, 因為需要運行在瀏覽器和真實的資料庫上;
  • 相比單元測試, 做不到完全的測試, 有些細微的邏輯可能會錯過;
  • 在啟動並執行時候有時候會發生不可控的事情, 因為瀏覽器的渲染, javascript 的運行, 有時候會有意想不到的情況發生.
  • 再一次強調, 此測試會非常慢;
Functional Tests 功能測試

功能測試類比一個 web 請求 (類比 $_GET 和 $_POST 等變數), 發送給 App, 應用返回 HTML 結果, 在測試的過程中, 可以分析並進行 assert 判定返回的資料, 甚至可以檢查資料是否正常的儲存到資料庫.

函數測試需要有一個測試環境, 幾個有名的架構, 像 Laravel 就有現成的 Package 可以用來整合.

以下是一個簡單的功能測試:

<?php$I = new FunctionalTester($scenario);$I->amOnPage(‘/‘);$I->click(‘Sign Up‘);$I->submitForm(‘#signup‘, array(‘username‘ => ‘MilesDavis‘, ‘email‘ => ‘[email protected]‘));$I->see(‘Thank you for Signing Up!‘);$I->seeEmailSent(‘[email protected]‘, ‘Thank you for registration‘);$I->seeInDatabase(‘users‘, array(‘email‘ => ‘[email protected]‘));

可以看出跟 Acceptance Tests 驗收測試 文法類似, 因為整合了測試環境, 允許檢查 email 和 資料庫.

優點
  • 跟 Acceptance tests 類似, 但是少了開啟瀏覽器來渲染, 速度快多了;
  • 能提供更詳細的分析, 如資料庫或者 email;
  • 可讀性很強, 雖然沒法讓測試人員看到開啟瀏覽器類比人工測試, 但是還是可以讓別人信服;
  • 比較穩定, 只有當大規模的代碼變更, 或者把代碼從一個架構轉移到另一個架構的時候, 才會有影響.
缺點
  • 無法測試 javascript 和 ajax;
  • 因為使用代碼相對簡單的類比一個瀏覽器請求, 測試的可行度, 或者說完整性, 會相對較差;
  • 需要一個架構的支援;
Unit Tests 單元測試

單元測試(又稱為模組測試, Unit Testing)是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作, 當 functional 或者 acceptance 測試都檢查不到 最小單位 的邏輯時, 還能通過 單元測試 確認深藏在代碼裡面的某些功能仍然可用, 單元測試能消除程式單元的不可靠性.

Codeception 的單元測試功能是基於 PHPUnit 之上的, 你可以照樣寫 PHPUnit 的測試代碼, Codeception 一樣能運行.

Codeception 在 PHPUnit 的基礎上提供了一系列工具能讓單元測試更加簡單, 代碼可讀性更高. 單元測試是最複雜最繁瑣的測試, 並且是會跟著商務邏輯代碼的改變而改變, 在實際開發中技術人員會經常因為需求、業務的變更而修改單元測試, 提高其可讀性和易用性可以協助相關人員更加快速的跟上一切變化.

以下是一個簡單的 integration test (整合測試)

<?phpfunction testSavingUser(){    $user = new User();    $user->setName(‘Miles‘);    $user->setSurname(‘Davis‘);    $user->save();    $this->assertEquals(‘Miles Davis‘, $user->getFullName());    $this->unitTester->seeInDatabase(‘users‘,array(‘name‘ => ‘Miles‘, ‘surname‘ => ‘Davis‘));}
優點
  • 最快的測試, 當然, 在上面的範例程式碼中, 觸碰到了資料庫, 還是有點延遲;
  • 能把測試覆蓋到特別刁鑽的程式邏輯上, 這是 functional 或者 acceptance 所做不到的;
  • 允許你測試最核心代碼, 確定核心代碼的健壯性;
  • 寫單元測試的程式要都是好程式員 。
缺點
  • 因為是單元測試, 會把代碼分為多個小單元單獨測試, 但是各個單元之間的對接測試不到;
  • 對代碼的修改非常敏感, 很多項目的 test 最後沒用上就是因為測試跟不上商務邏輯代碼的修改.

PHP 行為測試載入器 Codeception (介紹)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.