在安裝 PHP7 及各種擴(kuò)展的過程中,如果你是用源碼安裝腿宰,會(huì)注意到在 make 成功之后總會(huì)有一句提示:Don't forget to run 'make test'. 這個(gè) make test 就是運(yùn)行 PHP 的自動(dòng)化測(cè)試了。
如果你剛剛安裝完 PHP7脆栋,直接運(yùn)行 make test拓春,經(jīng)過漫長(zhǎng)的等待時(shí)間之后,最終的統(tǒng)計(jì)結(jié)果大概是這樣的:
會(huì)出現(xiàn)這么多 skip 和 fail 說明有一些擴(kuò)展你沒有安裝钦听,相關(guān)環(huán)境的配置也需要優(yōu)化
不過一般來講我們不需要運(yùn)行這么多的測(cè)試腳本洒试,尤其對(duì)單一擴(kuò)展而言,針對(duì)相關(guān)接口來測(cè)試就可以了朴上,所以我們進(jìn)一步看看如何獨(dú)立運(yùn)行測(cè)試腳本
首先打開 php 的 Makefile文件垒棋,我們看看 make test 都做了什么
test: all
@if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \
INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \
if test "$$INI_FILE"; then \
$(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \
else \
echo > $(top_builddir)/tmp-php.ini; \
fi; \
INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanne
d_files())); echo $$a[0];' 2> /dev/null`; \
if test "$$INI_SCANNED_PATH"; then \
INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \
$(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp
-php.ini; \
fi; \
TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \
TEST_PHP_SRCDIR=$(top_srcdir) \
CC="$(CC)" \
$(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \
TEST_RESULT_EXIT_CODE=$$?; \
rm $(top_builddir)/tmp-php.ini; \
exit $$TEST_RESULT_EXIT_CODE; \
else \
echo "ERROR: Cannot run tests without CLI sapi."; \
fi
先不用管那些變量的定義,核心內(nèi)容就是下面這一句
$(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS);
原來自動(dòng)測(cè)試是通過執(zhí)行 PHP 源碼根目錄下的 run-tests.php來進(jìn)行的痪宰,測(cè)試腳本一般放在 tests 文件夾下
我們隨便打開 php 安裝目錄下的 ./tests/basic叼架,里面有一些 phpt 文件,這就是一個(gè)個(gè)的測(cè)試腳本了
有些腳本中的內(nèi)容很簡(jiǎn)單衣撬,001.phpt 中的內(nèi)容是這樣的
--TEST--
Trivial "Hello World" test
--FILE--
<?php echo "Hello World"?>
--EXPECT--
Hello World
下面我們來只運(yùn)行 001.phpt 試試
首先要設(shè)置一下相關(guān)環(huán)境變量乖订,指定被測(cè)試對(duì)象 PHP,這里樓主用的是安裝路徑下的
php
export TEST_PHP_EXECUTABLE=/usr/local/php7/bin/php
然后在 php 安裝根目錄下執(zhí)行
php run-tests.php ./tests/basic/001.phpt
不出意外的話就可以得到下面的結(jié)果
這樣我們以后就可以寫一個(gè)腳本來指定要測(cè)試的 phpt具练,并統(tǒng)計(jì)出最終的結(jié)果乍构。
OneAPM for PHP 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理和監(jiān)控,包括代碼級(jí)別性能問題的可見性靠粪、性能瓶頸的快速識(shí)別與追溯蜡吧、真實(shí)用戶體驗(yàn)監(jiān)控毫蚓、服務(wù)器監(jiān)控和端到端的應(yīng)用性能管理。想閱讀更多技術(shù)文章昔善,請(qǐng)?jiān)L問 OneAPM 官方技術(shù)博客元潘。
本文轉(zhuǎn)自 OneAPM 官方博客