php make test 作用,PHP7 扩展之自动化测试

在源码安装PHP7后,执行'maketest'会进行大量自动化测试,这些测试通过run-tests.php脚本运行。如果只想针对特定扩展测试,可以找到对应测试脚本(如phpt文件),设置环境变量后运行该脚本。例如,通过指定PHP可执行文件位置并运行run-tests.php和测试脚本来执行单个测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在安装 PHP7 及各种扩展的过程中,如果你是用源码安装,会注意到在 make 成功之后总会有一句提示:Don't forget to run 'make test'. 这个 make test 就是运行 PHP 的自动化测试了。

如果你刚刚安装完 PHP7,直接运行 make test,经过漫长的等待时间之后,最终的统计结果大概是这样的:

9c2a3531f4de2a529bc8fe1c4e26a9b9.png

会出现这么多 skip 和 fail 说明有一些扩展你没有安装,相关环境的配置也需要优化

不过一般来讲我们不需要运行这么多的测试脚本,尤其对单一扩展而言,针对相关接口来测试就可以了,所以我们进一步看看如何独立运行测试脚本

首先打开 php 的 Makefile文件,我们看看 make test 都做了什么

test: all

@if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \

INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \

if test "$$INI_FILE"; then \

$(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \

else \

echo > $(top_builddir)/tmp-php.ini; \

fi; \

INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanne

d_files())); echo $$a[0];' 2> /dev/null`; \

if test "$$INI_SCANNED_PATH"; then \

INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \

$(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp

-php.ini; \

fi; \

TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \

TEST_PHP_SRCDIR=$(top_srcdir) \

CC="$(CC)" \

$(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \

TEST_RESULT_EXIT_CODE=$$?; \

rm $(top_builddir)/tmp-php.ini; \

exit $$TEST_RESULT_EXIT_CODE; \

else \

echo "ERROR: Cannot run tests without CLI sapi."; \

fi

先不用管那些变量的定义,核心内容就是下面这一句

$(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS);

原来自动测试是通过执行 PHP 源码根目录下的 run-tests.php来进行的,测试脚本一般放在 tests 文件夹下

我们随便打开 php 安装目录下的 ./tests/basic,里面有一些 phpt 文件,这就是一个个的测试脚本了

795418ea6c411a1417fbea2a28c0b99d.png

有些脚本中的内容很简单,001.phpt 中的内容是这样的

--TEST--

Trivial "Hello World" test

--FILE--

--EXPECT--

Hello World

下面我们来只运行 001.phpt 试试

首先要设置一下相关环境变量,指定被测试对象 PHP,这里楼主用的是安装路径下的

php

export TESTPHPEXECUTABLE=/usr/local/php7/bin/php

然后在 php 安装根目录下执行

php run-tests.php ./tests/basic/001.phpt

不出意外的话就可以得到下面的结果

82f3eae9299154ccaedf5db63bda414c842e9718_1_690x366.png

这样我们以后就可以写一个脚本来指定要测试的 phpt,并统计出最终的结果。

OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。想阅读更多技术文章,请访问 OneAPM 官方技术博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值