清單 5. PHP 自動化測試代碼片段
MILY: 'Andale Mono', 'Lucida Console', Monaco, fixed, monospace">$test_cnt = count($test_files); if ($test_cnt) { putenv('NO_INTERACTION=1'); verify_config(); write_information($html_output); usort($test_files, "test_sort"); $start_time = time(); if (!$html_output) { echo "Running selected tests.\n"; } else { show_start($start_time); } $test_idx = 0; run_all_tests($test_files, $environment); $end_time = time(); if ($html_output) { show_end($end_time); } if ($failed_tests_file) { fclose($failed_tests_file); } if (count($test_files) || count($test_results)) { compute_summary(); if ($html_output) { fwrite($html_file, "<hr/>\n" . get_summary(false, true)); } echo "================================================="; echo get_summary(false, false); } if ($html_output) { fclose($html_file); } if ($output_file != '' && $just_save_results) { save_or_mail_results(); } if (getenv('REPORT_EXIT_STATUS') == 1 and preg_match('/FAILED(?: |$)/', \ implode(' ', $test_results))) { exit(1); } |
在測試前,這個自動化測試的框架按照用戶指定的有效測試文件數目來決定具體將有多少個測試用例,并寫入 test_cnt 變量中以備計數使用。函數 verify_config() 分別用來驗證和準備各種環境變量的設置及 ini 設置。函數 write_information() 將輸出本次測試環境的各種信息,包括被測試 PHP 的版本號,使用的擴展( Extention ),ZEND 版本,INI 設置,測試所在的系統版本信息,以及測試時間記錄。
測試用例的運行發生在函數 run_all_tests() 中調用的函數 run_test() 中。 run_test() 將具體解析測試腳本中各個段落的含義,清除所以上次測試的記錄與設置將干凈的測試環境準備完畢,并把各種中間文件和日志文件準備好,然后用環境變量 TEST_PHP_EXECUTABLE 指定的 PHP 可執行對象運行實際的測試語句。最后將運行后的結果和測試腳本中期待值進行比對,如果比對失敗,則將結果信息一一記錄到用戶設置的日志文件中。
在所有的測試都運行結束后,變量 end_time 將記錄測試的結束時間,并用函數 compute_summary() 計算成功的、失敗的、跳過的等各種情況的測試數目,并將結果輸出。
由此可以總結出,這個自動化測試的框架主要包括如下幾個部分:
- 測試前的準備:包括環境準備以及測試腳本的解析等,如對上次測試遺留下的環境的清理,本次測試所必須的環境變量的讀取與設置,對測試參數的解析,測試腳本名的解析,各種輸出文件的準備等等。
- 測試中的腳本運行:解析測試腳本中的各個段落,組織出測試語句,執行測試語句,得到實際運行結果。
- 測試后的結果比對及輸出:測試后完成實際輸出結果和期待值的比對,包括各種格式化的比對和正則表達式方式的比對。按要求將結果存寫入指定的文件中,并輸出測試結果的總結報告。
![]() ![]() |
![]()
|
PHP 自動化測試方法的應用
了解了 PHP 官方自動化測試的運作方法后,用戶可以創建自己的 PHPT 測試腳本以幫助 PHP 進行函數黑盒測試。然而,應用 PHP 官方自動化測試的思想和框架搭建方法,用戶還可以構建自己的自動化測試工具,以應用于其他程序開發測試中。在定制自動化測試框架時,需要注意的一些問題,而這些問題在 PHP 官方自動化測試框架中就得到了很好的解決。比如:
- 測試腳本的結構。 PHP 官方自動化測試框架只需使用一個簡單的 PHPT 腳本,就可完成測試用例所有必須信息的生成。 PHPT 腳本中的段落使測試名,測試條件,測試步驟,期待值等信息一目了然,非常有利于閱讀和分析。當測試人員在測試過程中需要分析某個測試的失敗原因時,只需要打開對應的 PHPT 腳本就能夠清楚地理解測試用例的用意以及具體測試語句。從而大大減少測試人員的分析時間和難度。而且,這種段落式的組織是具有可擴展性的。
- 測試環境的保證。在測試中,環境的“干凈”與否直接影響到測試結果的準確性。好的自動化框架要力爭給測試一個“干凈”的環境。這里的環境包括:系統設置的環境變量,用戶設置的環境變量,測試運行中可能用到的臨時文件等。如果前一個測試改變了全局的環境,那么在這個環境里運行后一個測試所得到的結果就是不準確的。不準確的測試結果可能帶來極高的誤報率。
- 測試結果對比中的藝術。在將測試的實際輸出結果和期待結果進行比對中,PHP 官方自動化測試方法巧妙地應用了正則式比對和格式比對方法。這兩種方法的引入使得測試的誤報率大大降低。因為如果沒有正則式比對和格式比對方法,則測試人員只能將當前本次測試期待結果記錄在期待值中,而這種期待值將可能成為測試腳本的硬碼( hard code ),在回歸測試或期待結果是隨機值等情況下造成測試的誤失敗。
- 保留充分的日志信息。測試結束后,對于那些失敗的測試,測試人員要分析失敗的原因。此時,測試日志將發揮很重要的作用。充分的日志信息保留了測試失敗的現場,將幫助測試人員盡快找到失敗的原因并報告給開發人員。 PHP 官方自動化測試框架給予用戶靈活的設置方式去選擇需要的日志種類。在各種日志中,不僅將實際測試結果保留在了 “ .out ” 日志文件中,還將 “ .diff ” 留給用戶! .diff ” 文件能幫助測試人員更快地發現期待值與實際測試結果的差別,以更快發現測試失敗的問題所在。
然而,在 PHP 官方自動化測試框架中也存在一些對于用戶來說不完美的地方,比如:在測試異常的情況下,不能輸出完整的測試總結報告。如果測試人員需要完成一個長達十個小時的測試,而測試在第九小時發生了異常,但測試卻無法給出所有跑過的測試的測試報告,這將是很惱人的。所以在自動化測試框架的實現中要考慮好測試異常情況下的處理。
結束語
PHP 官方自動化測試方法給黑盒測試人員提供了一個很好的自動化測試框架的范例。測試人員不僅可以利用 PHPT 測試腳本完善對 PHP 的測試,更可以通過學習這個范例構建自己的自動化測試框架和工具,讓測試的自動化更好地服務于測試工作。
文章來源于領測軟件測試網 http://www.kjueaiud.com/