phpt文件说明

2024-06-03 00:32
文章标签 说明 phpt

本文主要是介绍phpt文件说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:https://github.com/reeze/tipi/blob/248c0ab7f966f10db5bc300c2ae82214cb2010b3/book/E-phpt-file.markdown

phpt文件用于PHP的自动化测试,这是PHP用自己来测试自己的测试数据用例文件。测试脚本通过执行PHP源码根目录下的run-tests.php,读取phpt文件执行测试。

phpt文件包含 TEST,FILE,EXPECT 等多个段落的文件。在各个段落中,TEST、FILE、EXPECT是基本的段落,每个测试脚本都必须至少包括这三个段落。其中:

  • TEST段可以用来填写测试用例的名字。
  • FILE段是一个 PHP 脚本实现的测试用例。
  • EXPECT段则是测试用例的期待值。

在这三个基本段落之外,还有多个段落,如作为用例输入的GET、POST、COOKIE等,此类字段最终会赋值给$env变量。比如,cookie存放在$env['HTTP_COOKIE'],$env变量将作为用例中脚本的执行环境。一些主要段落说明如下表所示:

PHP测试脚本中的段落说明

段落名填充内容备注
TEST测试用例名称必填段落
FILE测试脚本语句必填段落。用PHP语言书写的脚本语句。其执行的结果将与 EXPECT* 段的期待结果做对比。
ARGSFILE 段的输入参数选填段落
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文件。此文件的作用是根据传入的参数,分析用例相关数据,执行测试过程。其大概过程如下:

  1. 分析输入的命令行,根据参数配置相关参数,初始化各种信息。
  2. 分析用例输入参数,获取需要执行的用例文件列表。PHP支持指定单文件用例执行,支持多文件用例执行,支持* .phpt多用例执行,支持* .phpt简化版本多用例执行(相当于.phpt)。
  3. 遍历用例文件列表,执行每一个用例。对于每个用例,PHP会具体解析测试脚本中各个段落的含义,清除所有上次测试的记录与设置将准备此次的测试环境,并把各种中间文件和日志文件准备好,然后用环境变量 TEST_PHP_EXECUTABLE 指定的 PHP 可执行对象运行实际的测试语句。最后将运行后的结果和测试脚本中的预期结果(EXPECT*段)进行比较,如果比较结果一致,则测试通过;如果不一致,则测试失败,最后将结果信息一一记录到用户设置的日志文件中。
  4. 生成测试结果。

这仅仅是执行的过程,除此之外,还有若干准备和清理工作,如,对上次测试遗留下的环境的清理,本次测试所必须的环境变量的读取与设置,对测试参数的解析,测试脚本名的解析,各种输出文件的准备等等

以测试脚本/tests/basic/001.phpt为例:

[php]
--TEST--
Trivial "Hello World" test
--FILE--
<?php echo "Hello World"?>
--EXPECT--
Hello World

这个用例脚本只包含必填的三项。测试控制器会执行--FILE--下面的PHP文件,如果最终的输出是--EXPECT--所期望的结果则表示这个测试通过,如果不一致,则测试不通过,最终这个用例的测试结果会汇总会所有的测试结果集中。

这篇关于phpt文件说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025527

相关文章

Java之ServerSocket使用及说明

《Java之ServerSocket使用及说明》本文介绍了Java中ServerSocket类的使用方法,包括创建ServerSocket对象、绑定端口、监听连接请求、接受连接、关闭连接等常用方法,还... 目录前言常用方法使用案例1.实现TCP2.实现UDP总结前言Java中的ServerSocket

Java Exception与RuntimeException使用及说明

《JavaException与RuntimeException使用及说明》:本文主要介绍JavaException与RuntimeException使用及说明,具有很好的参考价值,希望对大家有所... 目录简介ExceptionRuntimeException自定义异常选择继承Exception(受检异常)

MySQL中存储过程(procedure)的使用及说明

《MySQL中存储过程(procedure)的使用及说明》存储过程是预先定义的SQL语句集合,可在数据库中重复调用,它们提供事务性、高效性和安全性,MySQL和Java中均可创建和调用存储过程,示例展... 目录概念示例1示例2总结概念存储过程:在数据库中预先定义好一组SQL语句,可以被程序反复调用。

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.