phpt文件說明

轉自:https://github.com/reeze/tipi/blob/248c0ab7f966f10db5bc300c2ae82214cb2010b3/book/E-phpt-file.markdown

phpt文件用於PHP的自動化測試,這是PHP用自己來測試自己的測試數據用例文件。測試腳本通過執行PHP源碼根目錄下的run-tests.php,讀取phpt文件執行測試。

phpt文件包含 TEST,FILE,EXPECT 等多個段落的文件。在各個段落中,TEST、FILE、EXPECT是基本的段落,每個測試腳本都必須至少包括這三個段落。其中:

  • TEST段可以用來填寫測試用例的名字。
  • FILE段是一個 PHP 腳本實現的測試用例。
  • EXPECT段則是測試用例的期待值。

在這三個基本段落之外,還有多個段落,如作爲用例輸入的GET、POST、COOKIE等,此類字段最終會賦值給$env變量。比如,cookie存放在$env['HTTP_COOKIE'],$env變量將作爲用例中腳本的執行環境。一些主要段落說明如下表所示:

PHP測試腳本中的段落說明

段落名 填充內容 備註
TEST 測試用例名稱 必填段落
FILE 測試腳本語句 必填段落。用PHP語言書寫的腳本語句。其執行的結果將與 EXPECT* 段的期待結果做對比。
ARGS FILE 段的輸入參數 選填段落
SKIPIF 跳過這個測試的條件 選填段落
POST 傳入測試腳本的 POST 變量 選填段落。如果使用POST段,建議配合使用SKIPIF段
GET 傳入測試腳本的 GET 變量 選填段落。如果使用GET段,建議配合使用SKIPIF段。
POST_RAW 傳入測試腳本的POST內容的原生值 選填段落。比如在做文件上傳測試時就需要使用此字段來模擬HTTP的POST請求。
COOKIE 傳入測試腳本的COOKIE的值 選填段落。最常見的是將PHPSESSID的值傳入。
INI 應用於測試腳本的 ini 設置 選填段落。例如 foo=bar 。其值可通過函數 ini_get(string name_entry) 獲得。
ENV 應用於測試腳本的環境設置 選填段落。例如做gzip測試,則需要設置環境HTTP_ACCEPT_ENCODING=gzip。
EXPECT 測試腳本的預期結果 相當於測試文件的結果 必填段落
EXPECTF 測試腳本的預期結果 選填段落。可用函數 sscanf() 中的格式表達預期結果 EXPECT 段的變體
EXPECTREGEX 測試腳本的正則預期結果 選填段落。以正則的方式包含多個預期結果,是預期結果EXPECT段的一種變體。
EXPECTHEADERS 測試腳本的預期頭部內容 選填段落.測試腳本期待HTTP頭部返回,是預期結果EXPECT段的另一種格式。驗證過程中會按頭部的字段一一比對測試,比如zlib擴展中,如果開啓zlib.output_compression,則在EXPECTHEADERS中包含Content-Encoding: gzip作爲預期結果。

phpt文件只是用例文件,它還需要一個控制器來調用這些文件,以實現整個測試過程。PHP的測試控制器文件是源碼根目錄下的run-tests.php文件。此文件的作用是根據傳入的參數,分析用例相關數據,執行測試過程。其大概過程如下:

  1. 分析輸入的命令行,根據參數配置相關參數,初始化各種信息。
  2. 分析用例輸入參數,獲取需要執行的用例文件列表。PHP支持指定單文件用例執行,支持多文件用例執行,支持* .phpt多用例執行,支持* .phpt簡化版本多用例執行(相當於.phpt)。
  3. 遍歷用例文件列表,執行每一個用例。對於每個用例,PHP會具體解析測試腳本中各個段落的含義,清除所有上次測試的記錄與設置將準備此次的測試環境,並把各種中間文件和日誌文件準備好,然後用環境變量 TEST_PHP_EXECUTABLE 指定的 PHP 可執行對象運行實際的測試語句。最後將運行後的結果和測試腳本中的預期結果(EXPECT*段)進行比較,如果比較結果一致,則測試通過;如果不一致,則測試失敗,最後將結果信息一一記錄到用戶設置的日誌文件中。
  4. 生成測試結果。

這僅僅是執行的過程,除此之外,還有若干準備和清理工作,如,對上次測試遺留下的環境的清理,本次測試所必須的環境變量的讀取與設置,對測試參數的解析,測試腳本名的解析,各種輸出文件的準備等等

以測試腳本/tests/basic/001.phpt爲例:

[php]
--TEST--
Trivial "Hello World" test
--FILE--
<?php echo "Hello World"?>
--EXPECT--
Hello World

這個用例腳本只包含必填的三項。測試控制器會執行--FILE--下面的PHP文件,如果最終的輸出是--EXPECT--所期望的結果則表示這個測試通過,如果不一致,則測試不通過,最終這個用例的測試結果會彙總會所有的測試結果集中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章