8 個 PHP 的軟體質量控制工具推薦(包含 QA 工具和測試工具)

為了傳播有質量的代碼, 我們必須在編碼時有測試的觀念 (如果不是在做 TDD)。 然而,市面上的PHP測試工具範圍太廣了,很難做出選擇。

這篇熱門文章將會選出最受歡迎的測試工具並且它已經被更新過以便反映出2017年的 QA 工具狀態。

沒有測試過的代碼是不完整的代碼。

PHPUnit

PHPUnit 是一款PHP測試框架。由 Sebastian Bergmann 在 2004 年創建,現在已經是支持 PHP 7 的版本 6 。

PHPUnit 有大量不斷湧現的教程, 這裡的一些 你可能已經看過。

Cucumber

Cucumber 是一個根據規範創建的驗收測試框架。它以生成可描述性的可閱讀的直白英文文本而出名。 Cucumber 的官方 PHP 實現的版本是 Behat。

在 SitePoint 上有個該框架的 入門教程 。下面的示例文檔即出自該教程,該示例很好地表明了對於預期結果多麼富有表達性。

Feature: Listing command In order to change the structure of the folder I am currently in As a UNIX user I need to be able see the currently available files and folders there Scenario: Listing two files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """

Atoum

Atoum 是另一個 PHP 單元測試框架. 這是一個獨立的軟體包, 你可以通過 GitHub, Composer 或通過 PHAR 可執行文件來安裝.

Atoum 測試非常易於使用通過使用表達方法名稱和鏈接.

$this->integer($classInstance->myMethod()) ->isEqualTo(10);$this->string($classInstance->myMethod()) ->contains("Something heppened");

你想要學習更多關於 Atoum 的 PHP 單元測試, 你可以按照這個 教程.

Selenium

Selenium 是自動瀏覽器測試的工具 (集成和驗收測試). 它將測試轉換成瀏覽器 API 指令並聲明預期的結果. 它支持大部分可用的瀏覽器.

我們可以通過使用一個 PHPUnit 擴展來使用 Selenium

composer require --dev phpunit/phpunitcomposer require --dev phpunit/phpunit-selenium

這裡是一個簡單的例子:

class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase{ public function testFormSubmissionWithUsername() { $this->byName(username)->value(name); $this->byId(subscriptionForm)->submit(); }}

你可以跟著這個系列來學習如果你想要學習了解更多 使用 PHPUnit 和 Selenium 測試.

Dusk

Laravel 的 Dusk 是另一個瀏覽器自動化工具. 它可以單獨使用 (通過 chromedriver) 或者 Selenium. 它有一個易於使用的 API 並且包含了所有可能性的測試例如等待元素, 文件上傳, 滑鼠控制, 等等. 下面是一個簡單的例子:

class LanguagesControllerTest extends DuskTestCase{ public function testCreate() { $this->browse(function (Browser $browser) { $user = $this->getAdminUser(); $browser->loginAs($user) ->visit(/panel/core/languages) ->click(#add) ->assertPathIs(/panel/core/languages/create) ->type(name, Arabic) ->select(direction, rtl) ->press(Submit) ->assertSee(Language: Arabic) ->assertSee(ar) ->assertSee(rtl) ->assertSee(Language created); }); }}

你可以通過查看 這個文檔 開始使用 Dusk 進行測試.

Kahlan

Kahlan 是一個使用了 describe-it 語法的全功能 Unit & BDD 測試框架.

describe("Positive Expectation", function() { it("expects that 5 > 4", function() { expect(5)->toBeGreaterThan(4); });});

從上面的語法可以看出它與Behat測試類似. Kahlan 支持存根 以及 脫離沙盒的 mocking 並且沒有任何依賴, 代碼覆蓋, 報告, 等等.

it("makes a instance double with a parent class", function() { $double = Double::instance([extends => KahlanUtilText]); expect(is_object($double))->toBe(true); expect(get_parent_class($double))->toBe(KahlanUtilText);});

php_testability

最後一個包在這裡我想提到的是 PHP Testability. 這是一個靜態分析工具它可以告訴你程序中可測試性的問題並生成詳細的報告.

該包目前還沒有一個正式標籤過的版本讓你去依賴使用, 但你可以在開發過程中安全地使用它. 你可以通過 Composer 來安裝它:

composer require edsonmedina/php_testability "dev-master"

然後像這樣運行:

vendor/bin/testability . -x vendor

持續集成(CI)服務

團隊間協作時的代碼交付中的一個重要組成部分就是在代碼合併到官方項目庫之前,自動審核代碼的能力。 大多數可用 CI 服務/工具 都提供了在不同平台和配置上代碼測試的能力,以確保代碼的安全合併。

有許多服務提供了很好的不同價格區間,不過你也可以使用開源工具 :

  • PHPCI: (開源) 入門文章.
  • TravisCI: (自由開源項目) 入門文章.
  • SemaphoreCI: (自由開源項目) 入門文章.
  • Jenkins: 入門文章.

總結

引入測試文化的過程是很困難的,只能伴隨實踐而緩慢發展。如果在意你的代碼,那就該測試它!前面的工具和資源會助你快速起步。

前面提過工具中你有過什麼使用經歷嗎?或是我們有所遺漏?告訴我們,我們會儘力豐富這篇基本工具的列表!

討論請前往 https://laravel-china.org/top...

推薦閱讀:

TAG:PHP | PHP開發 | PHP學習 |