本文将从一个 测试 人员的角度对 PHP 官方的 自动化测试 方法,自动化 测试框架 结构,以及具体的实现进行分析和研究。通过实际的例子,向读者展示 PHP 是如何实现有效的自动化测试以保证其代码高 质量 的。读者通过阅读本文,可以学习 PHP" name="description" />
本文将从一个测试人员的角度对 PHP 官方的自动化测试方法,自动化测试框架结构,以及具体的实现进行分析和研究。通过实际的例子,向读者展示 PHP 是如何实现有效的自动化测试以保证其代码高质量的。读者通过阅读本文,可以学习 PHP 官方自动化测试方法和实现,并将这种自动化测试方法应用到自己的开发过程中,提高代码功能质量。
PHP 官方自动化测试方法简述
以下介绍以 PHP 最新官方版本 5.2.8 的源码在 LINUX 系统平台上的分析为例展开。首先来看一下 PHP 的自动化测试脚本 PHPT 脚本。
自动化测试脚本 PHPT 示例
PHP 的测试脚本是以“ .phpt ”为后缀,包含 TEST,FILE,EXPECT 等多个段落的文件,简称 PHPT 。在各个段落中,TEST,FILE,EXPECT 是基本的段落,每个测试脚本都必须至少包括这三个段落。其中,TEST 段可以用来填写测试用例的名字; FILE 段是一个 PHP 脚本实现的测试用例; EXPECT 段则是测试用例的期待值。测试用例的运行中,PHP 将用被测试的 PHP 可执行对象去运行 FILE 段中的测试用例,用实际的结果去比对测试用例中 EXPECT 段所列的期待值;如果实际结果和期待值一致,则测试通过;如果不一致,则测试失败。
表 1 列出的是常用的段落名和其相应的填充内容说明。
段落名 | 填充内容 | 备注 |
TEST | 测试用例名称 | 必填段落 |
ARGS | FILE 段的输入参数 | 选填段落 |
SKIPIF | 跳过这个测试的条件 | 选填段落 |
POST | 传入测试脚本的 POST 变量 | 选填段落。如果使用 POST 段,建议配合使用 SKIPIF 段,如: --SKIPIF-- <?php if (php_sapi_name()=='cli') echo 'skip'; ?> |
GET | 传入测试脚本的 GET 变量 | 选填段落。如果使用 POST 段,建议配合使用 SKIPIF 段,如: --SKIPIF-- <?php if (php_sapi_name()=='cli') echo 'skip'; ?> |
INI | 应用于测试脚本的 ini 设置 | 选填段落。例如 foo=bar 。其值可通过函数 ini_get(string name_entry) 获得。 |
FILE | 测试脚本语句 | 必填段落。应用 PHP 语言书写的脚本语句。其执行的结果将与 EXPECT* 段的期待值做对比。 |
EXPECT | 测试脚本的期待值 | 必填段落 |
EXPECTF | 测试脚本的期待值,可用函数 sscanf() 中的格式表达期待值 | EXPECT 段的变体 |
EXPECTREGEX | 测试脚本的期待值,可用正则式表达期待值 | EXPECT 段的变体 |
以官方包里自带的测试脚本 “ 001.phpt ” 为例(见清单 1),从 TEST 段的内容看来这是一个对 PHP 版本进行验证的测试用例。 SKIPIF 段的内容写在了 “ skipip.inc ” 文件里。在 FILE 段里,测试用例将环境变量 TEST_PHP_EXECUTABLE 里设置的那个 PHP 的版本打印出来,这个结果将和 EXPECTF 中的字串进行格式匹对。
--TEST-- version string --SKIPIF-- <?php include "skipif.inc"; ?> --FILE-- <?php $php = getenv('TEST_PHP_EXECUTABLE'); var_dump(`$php -n -v`); echo "Done\n"; ?> --EXPECTF-- string(%d) "PHP %s (cli) (built: %s)%s Copyright (c) 1997-20%d The PHP Group Zend Engine v%s, Copyright (c) 1998-20%d Zend Technologies " Done |
如何运行 PHP 自动化测试脚本
在运行测试脚步前,首先要将被测试的 PHP 源码编译为可执行对象。
然后要导入若干环境变量。表 2 中介绍了主要的几个环境变量如何设置。
环境变量名 | 环境变量值 | 例子 |
TEST_PHP_EXECUTABLE | 设定被测试对象 PHP,或者 “ auto ” 。当设置 “ auto ” 时,如果是 CGI 模式,即为 “ ./sapi/cgi/php-cgi ” ;如果是 CLI 模式,即为 “ ./sapi/cli/php ” 。 | TEST_PHP_EXECUTABLE= $HOME/php-5.2.8/sapi/cli/php |
TEST_PHP_DETAILED | 设定是否需要详细的日志输出。设置值为 1 或者 0 。 | TEST_PHP_DETAILED=1 |
TEST_PHP_USER | 设定是否需要特制的用户目录。 | TEST_PHP_DETAILED= “ /usr/test1 ” |
TEST_PHP_LOG_FORMAT |
设定日志的格式。设置值为 “ LEOD ” 子串的子集。其中 L 代表测试后需要生成 “ .log ” 文件,E 代表 “ .exp ” ,O 代表 “ .out ” ,D 代表 “ .diff ” 。 | TEST_PHP_LOG_FORMAT="LD" |
在本例中,在 Bash 环境中设置环境变量如下:
export HOME=/home/user_dir/ export TEST_PHP_EXECUTABLE=$HOME/php-5.2.8/sapi/cli/php export TEST_PHP_DETAILED=1 export TEST_PHP_LOG_FORMAT="LEOD" |
经过这样设置后,被测试的 PHP 可执行对象就是放在目录 “ $HOME/php-5.2.8/sapi/cli/ ” 下编译好的那个 “ php ” 可执行文件。
执行测试前,还需将测试脚本 PHPT 编辑好,存为 “ .phpt ” 文件。这里以官方包里自带的测试脚本 “ 001.phpt ” 为例,运行如下:
bash-2.03$ cd $HOME/php-5.2.8/ bash-2.03$ $HOME/php-5.2.8/sapi/cli/php run-tests.php \ $HOME/php-5.2.8/sapi/cli/tests/001.phpt |