PHP(7.1.7)中 README.TESING 的翻译

重要的注意事项

失败的测试通常能帮助你发现自己本地系统设置的一些问题,这些问题并不是PHP本身的问题(至少对于官方PHP发行版本 : )).你可以设置在一个测试运行完后,自动提交测试的结果到我们的QA系统.

请注意..不要把一次失败的测试作为一个PHP的bug提交,或者在寻求关于为什么测试会在你的系统失败的帮助的时候,没有提供任何 关于你系统的特殊设置 的可能有用的信息.


测试的基础

测试你PHP的构建的最简单方法是: 在成功编译后,命令行运行 'make test' 命令,这个命令的作用是,用php cli 对所有功能和扩展进行测试.

为了执行你的测试脚本,在编译PHP的时候,一定同时要编译必要的SAPI, 然后你就可以通过输入 'make test' 指令去执行 在PHP源代码根目录下的tests目录里的全部 或者部分 测试脚本了.

用法:
'make test'

一般来说 'make test' 执行的是源码根目录下的 'run-tests.php' 文件, 因此, 你也能通过下面这样去执行 'make test'指令:

1.设置环境变量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执行 run-tests.php 这个文件,就一定要设置 TEST_PHP_EXECUTABLE 环境变量的值,从而清楚地指明要被测试的php(也就是要用来去运行测试脚本的php)

如果你用 'make test'指令去运行测试, PHP-cli 和CGI 会自动的被设置.'make test' 会用 php-cli 执行 run-tests.php 文件,而有一些测试脚本,例如:session测试, 是必须在CGI SAPI环境中执行的,因此,你必须在编译PHP的时候, 把CGI SAPI 也编译进去.

注意:
执行 'run-tests.php' 文件的PHP 和 最终执行测试脚本的 PHP 获取不是同一个, 如果你使用了不同路径的PHP,获取会出错.

[ 使用哪个php.ini ]

一旦PHP安装完毕,'make test'将会使用同一个php.ini文件, 测试和php.ini文件是独立的,因此,如果你发现一个测试被php.ini文件的设置所影响,请报告它,以便我们解决.

[ 执行哪个测试脚本 ]

不加任何参数的去执行 "run-tests.php" ("make test") 会运行所有的测试脚本(到源文件根目录或者子目录下的tests文件夹下找). 如果在文件夹下游扩展名为 phpt 的文件,'run-tests.php'在测试脚本中,搜寻sections,同时根据 SKIP SECTION 的内容判断是否执行这个测试.如果这个测试判断要被执行,文件的 FILE section的内容将会被提取到 一个和当前测试脚本同名的.php文件中,同时执行这个文件.

如果加上参数, 或者设置相关的环境变量,寻找范围将会拓宽,任何以.phpt为扩展名的文件将会被认为是一个测试脚本

测试能够像下面一样选择性的执行测试脚本
例子:
./sapi/cli/php run-tests.php ext/mbstring/*
./sapi/cli/php run-tests.php ext/mbstring/020.phpt

[ 测试结果 ]

测试结果将打印到标准输出.如果有失败的测试,'run-tests.php'脚本会将结果保存 测试结果,期望结果 和执行的代码 到测试脚本目录下.举个例子,如果 ext/myext/tests/myext.phpt 这个测试脚本测试出错, 下面几个文件将会被创建:

 ext/myext/tests/myext.php   - 实际执行的文件(代码)
 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,或者是因为测试者的系统环境应用了一些没有考虑的到设置,又或者PHP本身存在bug.如果这是一个知名的bug,我们会尽量在测试名或者文件名中提供bug number,你能够访问 http://bugs.php.net/12345 (其中 12345是bug number) 得到相关bug的信息.

为了简明和自动化处理,bug number 一般用一个哈希标志 # 开头 原文 => (bug numbers are prefixed by a hash
sign '#' in test names and/or test cases are named bug12345.phpt.)

注意
测试失败所生成的文件能够通过环境变量 TEST_PHP_LOG_FORMAT 的设置去改变.对于你想要生成的文件,你可以用上面括号中的字母去设置 ((L)(E)这些),默认的设置是 LEOD. 而 .php文件总是会被生成的.

注意
你也可以通过设置 TEST_PHP_DETAILED 变量,去允许/禁止生成详细的测试信息.

[ 自动化测试 ]

如果你喜欢追求速度,新技术和质量保证, 把环境变量 NO_INTERACTION 设置为1,这样将不会提示让测试者输入任何内容.

一般的,'make test' 退出时,不管独立的测试的结果是成功还是失败,都会返回 0,当把环境变量 REPORT_EXIT_STATUS 设置为1, 当其中一个独立的测试失败时, 'make test'将会返回一个非零的数字 ($?).

cron定时执行去自动化测试的脚本:

 ========== 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 =============

注意
当REPORT_EXIT_STATUS 环境变量设置了的时候, run-tests.php 的返回值将会是1. 而 "make test" 或许会返回大于1的值. 目前, gmake 3.79.1 将会返回 2, 因此,在判断测试是否成功时,我们建议 用大于0 (-gt 0), 而不是一个特定的值,比如 1.

[ 创建一个新的测试脚本 ]

如果你能够熟练写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);

 ?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容