zoukankan      html  css  js  c++  java
  • PHP7 扩展之自动化测试

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

    如果你刚刚安装完 PHP7,直接运行 make test,经过漫长的等待时间之后,最终的统计结果大概是这样的:
    PHP7 扩展之自动化测试
    会出现这么多 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(",
    ", 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 文件,这就是一个个的测试脚本了

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

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

    下面我们来只运行 001.phpt 试试
    首先要设置一下相关环境变量,指定被测试对象 PHP,这里楼主用的是安装路径下的
    php

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

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

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

    不出意外的话就可以得到下面的结果
    PHP7 扩展之自动化测试

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

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

    本文转自 OneAPM 官方博客

  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/oneapm/p/5320129.html
Copyright © 2011-2022 走看看