phpt文件用于PHP的自动化测试,这是PHP用自己来测试自己的测试数据用例文件。测试脚本通过执行PHP源码根目录下的run-tests.php,读取phpt文件执行测试。
phpt文件包含 TEST,FILE,EXPECT 等多个段落的文件。在各个段落中,TEST、FILE、EXPECT是基本的段落,每个测试脚本都必须至少包括这三个段落。其中:
在这三个基本段落之外,还有多个段落,如作为用例输入的GET、POST、COOKIE等,此类字段最终会赋值给$env变量。比如,cookie存放在$env['HTTP_COOKIE'],$env变量将作为用例中脚本的执行环境。一些主要段落说明如下表所示:
PHP测试脚本中的段落说明
:段落名 | 填充内容 | 备注 |
---|---|---|
TEST | 测试脚本语句 | 必填段落 |
FILE | 测试脚本语句 | 必填段落。用PHP语言书写的脚本语句。其执行的结果将与 EXPECT* 段的期待结果做对比。 |
ARGS | FILE 段的输入参数 | 选填段落 |
SKIPIF | 跳过这个测试的条件 | 选填段落 |
POST | 传入测试脚本的 POST 变量 | 选填段落。如果使用POST段,建议配合使用SKIPIF段 |
GET | 传入测试脚本的 GET 变量 | 选填段落。如果使用GET段,建议配合使用SKIPIF段。 |
POST_RAW | 传入测试脚本的POST内容的原生值 | 选填段落。比如在做文件上传测试时就需要使用此字段来模拟HTTP的POST请求。 |
COOKIE | 传入测试脚本的COOKIE的值 | 选填段落。最常见的是将PHPSESSID的值传入。 |
INI | 应用于测试脚本的 ini 设置 | 选填段落。例如 foo=bar 。其值可通过函数 ini_get(string name_entry) 获得。 |
ENV | 应用于测试脚本的环境设置 | 选填段落。例如做gzip测试,则需要设置环境HTTP_ACCEPT_ENCODING=gzip。 |
EXPECT | 测试脚本的预期结果 相当于测试文件的结果 | 必填段落 |
EXPECTF | 测试脚本的预期结果 | 选填段落。可用函数 sscanf() 中的格式表达预期结果 EXPECT 段的变体 |
EXPECTREGEX | 测试脚本的正则预期结果 | 选填段落。以正则的方式包含多个预期结果,是预期结果EXPECT段的一种变体。 |
EXPECTHEADERS | 测试脚本的预期头部内容 | 选填段落.测试脚本期待HTTP头部返回,是预期结果EXPECT段的另一种格式。验证过程中会按头部的字段一一比对测试,比如zlib扩展中,如果开启zlib.output_compression, 则在EXPECTHEADERS中包含Content-Encoding: gzip作为预期结果。 |
phpt文件只是用例文件,它还需要一个控制器来调用这些文件,以实现整个测试过程。PHP的测试控制器文件是源码根目录下的run-tests.php文件。此文件的作用是根据传入的参数,分析用例相关数据,执行测试过程。其大概过程如下:
这仅仅是执行的过程,除此之外,还有若干准备和清理工作,如,对上次测试遗留下的环境的清理,本次测试所必须的环境变量的读取与设置,对测试参数的解析,测试脚本名的解析,各种输出文件的准备等等
以测试脚本/tests/basic/001.phpt为例:
--TEST--
Trivial "Hello World" test
--FILE--
<?php echo "Hello World"?>
--EXPECT--
Hello World
这个用例脚本只包含必填的三项。测试控制器会执行--FILE--下面的PHP文件,如果最终的输出是--EXPECT--所期望的结果则表示这个测试通过,如果不一致,则测试不通过,最终这个用例的测试结果会汇总会所有的测试结果集中。