PHP 開發入門自動化測試歷程(一)

Umbrella-J發表於2021-01-26

刻意練習,堅持

作為一名開發人員,保證程式碼質量是基本的素養。良好的程式碼規範是不錯的方法,也是一直在堅持的。對程式碼的自動化測試,則是另一種重要的形式。這裡不糾結於單元測試、介面測試、功能測試這些概念,核心是實現 自動化測試 的目標。

在這段稱得上“入門”的階段之前,也斷斷續續嘗試了幾次自動化測試的學習,但都是不了了之。究其原因,主要有兩點:一是沒有動手去刻意練習,只是粗略的看了文件;二是糾結要如何開始對自己程式碼的測試

現在的 Web開發,大都是在比較成熟的框架基礎上進行。個人主要在 Laravel框架上開發,就以該框架為例記錄自己“入門”的經歷。( Laravel版本為 5.8 ,其它版本可能有所區別,具體檢視官方文件)

認識 PHPUnit

自動化測試 就是要通過編寫測試程式碼來對應用程式程式碼進行測試,為了編寫更加規範、更加簡介的測試程式碼,就產生了測試框架。

PHPUnit是面向 PHP 開發者的成熟測試框架,進行自動化測試大概率都要使用該工具,對其有一定的認識是必要的。官網地址:www.phpunit.cn/

看著官方文件上那麼多章節的內容,總是容易被勸退。但剛開始並不需要掌握那麼多的,核心三點:安裝、編寫、執行

安裝 PHPUnit

有兩種方式可以使用 PHPUnit

  • 一是獨立下載 PHPUnit.phar 檔案,然後編寫批處理檔案 **echo @php “%~dp0phpunit.phar” %* > phpunit.cmd** ,再加入環境變數,即可全域性使用 phpunit 命令。
  • 二是在應用程式中通過 composer安裝 phpunit/phpunit包,然後在應用程式根目錄下就可以使用 ./vendor/bin/phpunit 命令。

具體使用哪種方式,也是跟著使用場景走,兩者都用也可行。

  1. 如果只是個人簡單嘗試,並沒有一個應用程式,當然選擇第一種方式就可以了。
  2. 如果是開發過程中的接入測試,第二種方式顯然更優,並且很多框架都繼承了測試框架,使用會更加優雅。

編寫測試

工具準備好了,接下來就是去編寫測試程式碼,這需要遵循測試框架基本慣例和步驟:

  • 以類為單位,開始編寫測試程式碼。測試類遵循 Test 結尾的駝峰命名
  • 測試類繼承測試框架提供的抽象類 PHPUnit\Framework\TestCase (在框架中可能是其它類)
  • 類方法就是一個個測試用例,這裡編寫具體的測試邏輯
  • 類方法支援以 test開頭的駝峰命名 或者 新增 @test 註解的蛇形命名兩種形式

一個簡單的測試示例:

<?php 
use PHPUnit\Framework\TestCase;   

// 測試類命名以 Test 結尾,繼承 TestCase 
class ExapmleTest extends TestCase 
{  
    // 測試用例1,以 test 開頭的駝峰命名  
    public function testTrue()  
    {  
        $this->assertTrue(true);  
    }    

    /**  @test 測試用例2,使用 @test 註解的蛇形命名*/  
    public function is_false()  
    {  
        $this->assertFalse(false);  
    }
}

執行測試

當我們編寫好一個測試類後,就可以使用 phpunit執行相應測試了,只需要簡單的在測試檔案所在目錄下,在命令列中執行 phpunit ExampleTest.php 即可,輸出通常如下:

PHPUnit 6.5.3 by Sebastian Bergmann and contributors.   

..                                                   2 / 2 (100%) 

Time: 483 ms, Memory: 10.00MB   OK (2 test, 2 assertion)

注意上面第三行的 .字元,對於每個測試的執行, PHPUnit 都會輸出一個字元來表示其執行結果,常見的三種字元如下:.表示測試通過, F表示測試中斷言失敗, E 表示測試中出現了錯誤,其它字元參考文件。

上面是執行一整個檔案的全部測試,有時候只需要執行單個測試,也是可以的:

phpunit --filter testTrue ./ExapmleTest.php

更多的命令列選項,在使用過程中,根據需求查詢文件獲知。

參考

本作品採用《CC 協議》,轉載必須註明作者和本文連結
生於憂患,死於安樂

相關文章