PHP自动化测试(一)make test 和 phpt

当PHP编译完成后,编译程序会提示不要忘记执行make test,make test会检查编译后的程序是否有问题(PS:并不一定编译成功的程序就会没有问题了)。

一、关于make test

打开Makefile文件,找到make test对应的代码,其中

$(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);

代码是核心语句。可以看出,自动化测试是通过源代码下的run-test.php执行的。

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_scanned_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); \
		rm $(top_builddir)/tmp-php.ini; \
	else \
		echo "ERROR: Cannot run tests without CLI sapi."; \
	fi
我们修改一下Makefile文件,将核心的语句echo出来,看看是什么样子的。

/download/php-5.4.45/sapi/cli/php -n -c /download/php-5.4.45/tmp-php.ini -d open_basedir= -d output_buffering=0 -d memory_limit=-1 /download/php-5.4.45/run-tests.php -n -c /download/php-5.4.45/tmp-php.ini -d extension_dir=/download/php-5.4.45/modules/
直接执行该语句,报错:

ERROR: environment variable TEST_PHP_EXECUTABLE must be set to specify PHP executable!

Makefile脚本中定义了TEST_PHP_EXECUTABLE这个变量,如果要在shell中使用,需要export这个变量。接下来,我整理一个make install后的自动化测试代码(PS:如果是CGI的话使用/usr/local/php_5.4.45/bin/php-cgi):

export TEST_PHP_EXECUTABLE=/usr/local/php_5.4.45/bin/php
/usr/local/php_5.4.45/bin/php ./run-tests.php 

 
  

二、关于phpt

在执行make test过程中,可以看到实际上是执行源代码中的phpt文件。打开其中一个文件,我们看看里面的内容。

--TEST--
Trivial "Hello World" test
--FILE--

--EXPECT--
Hello World
--Test--,是指测试的描述内容

--FILE--,是指测试的PHP代码

--EXPECT--,是指测试PHP代码的期望输出,如果输出不一致,则证明测试不通过

可以到http://qa.php.net/write-test.php这里查看如何编写一个phpt文件


你可能感兴趣的:(PHP,自动化测试)