PHP(7.1.7)中 README.TESING 的翻譯

重要的注意事項

失敗的測試通常能幫助你發(fā)現(xiàn)自己本地系統(tǒng)設(shè)置的一些問題,這些問題并不是PHP本身的問題(至少對于官方PHP發(fā)行版本 : )).你可以設(shè)置在一個測試運行完后,自動提交測試的結(jié)果到我們的QA系統(tǒng).

請注意..不要把一次失敗的測試作為一個PHP的bug提交,或者在尋求關(guān)于為什么測試會在你的系統(tǒng)失敗的幫助的時候,沒有提供任何 關(guān)于你系統(tǒng)的特殊設(shè)置 的可能有用的信息.


測試的基礎(chǔ)

測試你PHP的構(gòu)建的最簡單方法是: 在成功編譯后,命令行運行 'make test' 命令,這個命令的作用是,用php cli 對所有功能和擴展進(jìn)行測試.

為了執(zhí)行你的測試腳本,在編譯PHP的時候,一定同時要編譯必要的SAPI, 然后你就可以通過輸入 'make test' 指令去執(zhí)行 在PHP源代碼根目錄下的tests目錄里的全部 或者部分 測試腳本了.

用法:
'make test'

一般來說 'make test' 執(zhí)行的是源碼根目錄下的 'run-tests.php' 文件, 因此, 你也能通過下面這樣去執(zhí)行 'make test'指令:

1.設(shè)置環(huán)境變量TEST_PHP_EXECUTABLE 為你的php-cli路徑 => export =sapi/cli/php
2.sapi/cli/php [-c /path/to/php.ini] run-tests.php [ext/foo/tests/GLOB]


[ 運行 make test 時, 找尋php的路徑]

如果你像上面一樣, 在命令行直接用php-cli執(zhí)行 run-tests.php 這個文件,就一定要設(shè)置 TEST_PHP_EXECUTABLE 環(huán)境變量的值,從而清楚地指明要被測試的php(也就是要用來去運行測試腳本的php)

如果你用 'make test'指令去運行測試, PHP-cli 和CGI 會自動的被設(shè)置.'make test' 會用 php-cli 執(zhí)行 run-tests.php 文件,而有一些測試腳本,例如:session測試, 是必須在CGI SAPI環(huán)境中執(zhí)行的,因此,你必須在編譯PHP的時候, 把CGI SAPI 也編譯進(jìn)去.

注意:
執(zhí)行 'run-tests.php' 文件的PHP 和 最終執(zhí)行測試腳本的 PHP 獲取不是同一個, 如果你使用了不同路徑的PHP,獲取會出錯.

[ 使用哪個php.ini ]

一旦PHP安裝完畢,'make test'將會使用同一個php.ini文件, 測試和php.ini文件是獨立的,因此,如果你發(fā)現(xiàn)一個測試被php.ini文件的設(shè)置所影響,請報告它,以便我們解決.

[ 執(zhí)行哪個測試腳本 ]

不加任何參數(shù)的去執(zhí)行 "run-tests.php" ("make test") 會運行所有的測試腳本(到源文件根目錄或者子目錄下的tests文件夾下找). 如果在文件夾下游擴展名為 phpt 的文件,'run-tests.php'在測試腳本中,搜尋sections,同時根據(jù) SKIP SECTION 的內(nèi)容判斷是否執(zhí)行這個測試.如果這個測試判斷要被執(zhí)行,文件的 FILE section的內(nèi)容將會被提取到 一個和當(dāng)前測試腳本同名的.php文件中,同時執(zhí)行這個文件.

如果加上參數(shù), 或者設(shè)置相關(guān)的環(huán)境變量,尋找范圍將會拓寬,任何以.phpt為擴展名的文件將會被認(rèn)為是一個測試腳本

測試能夠像下面一樣選擇性的執(zhí)行測試腳本
例子:
./sapi/cli/php run-tests.php ext/mbstring/*
./sapi/cli/php run-tests.php ext/mbstring/020.phpt

[ 測試結(jié)果 ]

測試結(jié)果將打印到標(biāo)準(zhǔn)輸出.如果有失敗的測試,'run-tests.php'腳本會將結(jié)果保存 測試結(jié)果,期望結(jié)果 和執(zhí)行的代碼 到測試腳本目錄下.舉個例子,如果 ext/myext/tests/myext.phpt 這個測試腳本測試出錯, 下面幾個文件將會被創(chuàng)建:

 ext/myext/tests/myext.php   - 實際執(zhí)行的文件(代碼)
 ext/myext/tests/myext.log   - log of test execution (L)
 ext/myext/tests/myext.exp   - expected output (E)
 ext/myext/tests/myext.out   - output from test script (O)
 ext/myext/tests/myext.diff  - diff of .out and .exp (D)

失敗的測試一般都是因為bug,或者是測試本身存在bug,或者是因為測試者的系統(tǒng)環(huán)境應(yīng)用了一些沒有考慮的到設(shè)置,又或者PHP本身存在bug.如果這是一個知名的bug,我們會盡量在測試名或者文件名中提供bug number,你能夠訪問 http://bugs.php.net/12345 (其中 12345是bug number) 得到相關(guān)bug的信息.

為了簡明和自動化處理,bug number 一般用一個哈希標(biāo)志 # 開頭 原文 => (bug numbers are prefixed by a hash
sign '#' in test names and/or test cases are named bug12345.phpt.)

注意
測試失敗所生成的文件能夠通過環(huán)境變量 TEST_PHP_LOG_FORMAT 的設(shè)置去改變.對于你想要生成的文件,你可以用上面括號中的字母去設(shè)置 ((L)(E)這些),默認(rèn)的設(shè)置是 LEOD. 而 .php文件總是會被生成的.

注意
你也可以通過設(shè)置 TEST_PHP_DETAILED 變量,去允許/禁止生成詳細(xì)的測試信息.

[ 自動化測試 ]

如果你喜歡追求速度,新技術(shù)和質(zhì)量保證, 把環(huán)境變量 NO_INTERACTION 設(shè)置為1,這樣將不會提示讓測試者輸入任何內(nèi)容.

一般的,'make test' 退出時,不管獨立的測試的結(jié)果是成功還是失敗,都會返回 0,當(dāng)把環(huán)境變量 REPORT_EXIT_STATUS 設(shè)置為1, 當(dāng)其中一個獨立的測試失敗時, 'make test'將會返回一個非零的數(shù)字 ($?).

cron定時執(zhí)行去自動化測試的腳本:

 ========== qa-test.sh =============
 #!/bin/sh

 CO_DIR=$HOME/cvs/php7
 MYMAIL=qa-test@domain.com
 TMPDIR=/var/tmp
 TODAY=`date +"%Y%m%d"`

 # Make sure compilation environment is correct
 CONFIGURE_OPTS='--disable-all --enable-cli --with-pcre'
 export MAKE=gmake
 export CC=gcc

 # Set test environment
 export NO_INTERACTION=1
 export REPORT_EXIT_STATUS=1

 cd $CO_DIR
 cvs update . >>$TMPDIR/phpqatest.$TODAY
 ./cvsclean ; ./buildconf ; ./configure $CONFIGURE_OPTS ; $MAKE
 $MAKE test >>$TMPDIR/phpqatest.$TODAY 2>&1
 if test $? -gt 0
 then
         cat $TMPDIR/phpqatest.$TODAY | mail -s"PHP-QA Test Failed for $TODAY" $MYMAIL
 fi
 ========== end of qa-test.sh =============

注意
當(dāng)REPORT_EXIT_STATUS 環(huán)境變量設(shè)置了的時候, run-tests.php 的返回值將會是1. 而 "make test" 或許會返回大于1的值. 目前, gmake 3.79.1 將會返回 2, 因此,在判斷測試是否成功時,我們建議 用大于0 (-gt 0), 而不是一個特定的值,比如 1.

[ 創(chuàng)建一個新的測試腳本 ]

如果你能夠熟練寫PHP,那么寫一個測試腳本將是很容易的事情.同時也可以參考 : http://qa.php.net/write-test.php

[ 如何幫助我們 ]

如果你找到了一個PHP的bug,你可以把bug報告和測試腳本提交給我們.你不需要寫一個完整的腳本,只需要提供給我們一個按下面格式寫成的測試腳本就可以了.
在提交前,請測試這個腳本,同時一定要確定你的 ACTUAL OUTPUT 部分 和 EXPECTED OUTPUT 部分是正確的.

<?php
 /*
 Bug #12345
 substr() bug. Do not return expected string.

 ACTUAL OUTPUT
 XYXA

 EXPECTED OUTPUT
 ABCD
 */

 $str = "XYZABCD";
 echo substr($str,3,7);

 ?>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末像寒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子精刷,更是在濱河造成了極大的恐慌喉磁,老刑警劉巖输吏,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機隶症,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岗宣,“玉大人蚂会,你說我怎么就攤上這事『氖剑” “怎么了胁住?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刊咳。 經(jīng)常有香客問我彪见,道長,這世上最難降的妖魔是什么娱挨? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任余指,我火速辦了婚禮,結(jié)果婚禮上让蕾,老公的妹妹穿的比我還像新娘浪规。我一直安慰自己,他們只是感情好探孝,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布笋婿。 她就那樣靜靜地躺著,像睡著了一般顿颅。 火紅的嫁衣襯著肌膚如雪缸濒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音庇配,去河邊找鬼斩跌。 笑死,一個胖子當(dāng)著我的面吹牛捞慌,可吹牛的內(nèi)容都是我干的耀鸦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼啸澡,長吁一口氣:“原來是場噩夢啊……” “哼袖订!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗅虏,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤洛姑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后皮服,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楞艾,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年龄广,在試婚紗的時候發(fā)現(xiàn)自己被綠了硫眯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜀细,死狀恐怖舟铜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奠衔,我是刑警寧澤谆刨,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站归斤,受9級特大地震影響痊夭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脏里,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一她我、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迫横,春花似錦番舆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呛讲,卻和暖如春禾怠,著一層夾襖步出監(jiān)牢的瞬間返奉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工吗氏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芽偏,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓弦讽,卻偏偏與公主長得像污尉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坦袍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容