Commit: 040a9381d5949b35031bb47b0cbc0e89a7b29057 Author: Peter Kokot <peterko...@gmail.com> Wed, 17 Oct 2018 08:37:20 +0200 Parents: 401c36481bf77f14c9b63899ce6929a89654e93f Branches: master
Link: http://git.php.net/?p=web/qa.git;a=commitdiff;h=040a9381d5949b35031bb47b0cbc0e89a7b29057 Log: Move README.TESTING info to qa.php.net docs The README.TESTING file was moved from the php-src to qa.php.net for easier reading and maintenance. Changed paths: M running-tests.php
diff --git a/running-tests.php b/running-tests.php index c7e9fb5..d382561 100644 --- a/running-tests.php +++ b/running-tests.php @@ -6,38 +6,171 @@ $SITE_UPDATE = date("D M d H:i:s Y T", filectime(__FILE__)); common_header(); ?> - <h1>Test framework tests</h1> - <p> - Please run the tests from our test framework. You can do this by typing - <code>make test</code> after you compiled PHP with <code>make</code>. - </p> - - <p> - When <code>make test</code> finished running tests, and if there are any - failed tests, the script asks to send the logs to the PHP QA mailinglist. - Please answer "y" to this question so that we can efficiently process the results, - entering your e-mail address (which will not be transmitted in plaintext to any list) - enables us to ask you some more information if a test failed. Note that this script - also uploads php -i output so your hostname may be transmitted. - </p> - - <p> - Specific tests can also be executed, like running tests for a certain extension. To do - this you can do like so (for example the standard library): - <code>make test TESTS=ext/standard</code>. Where <code>TESTS=</code> points to a - directory containing <code>.phpt</code> files or a single <code>.phpt</code> file like: - <code>make test TESTS=tests/basic/001.phpt</code>. You can also pass options directly - to the underlaying script that runs the test suite (<code>run-tests.phpt</code>) using - <code>TESTS=</code>, for example to check for memory leaks using Valgrind, the <code>-m</code> - option can be passed along: <code>make test TESTS="-m Zend/"</code>. For a full list - of options that can be passed along, then run <code>make test TESTS=-h</code>. - </p> - - <p> - <strong>Windows users:</strong> On Windows the make command is called <code>nmake</code> - instead of <code>make</code>. This means that on Windows you will have to run - <code>nmake test</code>, to run the test suite. - </p> + +<h1>Test framework tests</h1> + +<p>The easiest way to test your PHP build is to run <code>make test</code> from +the command line after successfully compiling. This will run the all tests for +all enabled functionalities and extensions located in tests folders under the +source root directory using the PHP CLI binary.</p> + +<p><code>make test</code> basically executes <code>run-tests.php</code> script +under the source root (parallel builds will not work). Therefore you can execute +the script as follows:</p> + +<pre> +TEST_PHP_EXECUTABLE=sapi/cli/php \ +sapi/cli/php [-c /path/to/php.ini] run-tests.php [ext/foo/tests/GLOB] +</pre> + +<h2>Which php executable does make test use?</h2> + +<p>If you are running the <code>run-tests.php</code> script from the command +line (as above) you must set the <code>TEST_PHP_EXECUTABLE</code> environment +variable to explicitly select the PHP executable that is to be tested, that is, +used to run the test scripts.</p> + +<p>If you run the tests using make test, the PHP CLI and CGI executables are +automatically set for you. <code>make test</code> executes +<code>run-tests.php</code> script with the CLI binary. Some test scripts such +as session must be executed by CGI SAPI. Therefore, you must build PHP with CGI +SAPI to perform all tests.</p> + +<p>NOTE: PHP binary executing <code>run-tests.php</code> and php binary used for +executing test scripts may differ. If you use different PHP binary for executing +<code>run-tests.php</code> script, you may get errors. + +<h2>Which php.ini is used?</h2> + +<p><code>make test</code> uses the same php.ini file as it would once installed. +The tests have been written to be independent of that php.ini file, so if you +find a test that is affected by a setting, please report this, so we can address +the issue.</p> + +<h2>Which test scripts are executed?</h2> + +<p>The <code>run-tests.php</code> (<code>make test</code>), without any arguments +executes all test scripts by extracting all directories named <code>tests</code> +from the source root and any subdirectories below. If there are files, which +have a <code>phpt</code> extension, <code>run-tests.php</code> looks at the +sections in these files, determines whether it should run it, by evaluating the +<code>SKIPIF</code> section. If the test is eligible for execution, the +<code>FILE</code> section is extracted into a <code>.php</code> file (with the +same name besides the extension) and gets executed. When an argument is given or +TESTS environment variable is set, the GLOB is expanded by the shell and any file +with extension <code>*.phpt</code> is regarded as a test file.</p> + +<p>Tester can easily execute tests selectively with as follows:</p> + +<pre> +./sapi/cli/php run-tests.php ext/mbstring/* +./sapi/cli/php run-tests.php ext/mbstring/020.phpt +</pre> + +<h2>Test results</h2> + +<p>Test results are printed to standard output. If there is a failed test, the +<code>run-tests.php</code> script saves the result, the expected result and the +code executed to the test script directory. For example, if ext/myext/tests/myext.phpt +fails to pass, the following files are created:</p> + +<pre> +ext/myext/tests/myext.php - actual test file executed +ext/myext/tests/myext.log - log of test execution (L) +ext/myext/tests/myext.exp - expected output (E) +ext/myext/tests/myext.out - output from test script (O) +ext/myext/tests/myext.diff - diff of .out and .exp (D) +</pre> + +<p>Failed tests are always bugs. Either the test is bugged or not considering +factors applying to the tester's environment, or there is a bug in PHP. If this +is a known bug, we strive to provide bug numbers, in either the test name or the +file name. You can check the status of such a bug, by going to: +http://bugs.php.net/12345 where 12345 is the bug number. For clarity and +automated processing, bug numbers are prefixed by a hash sign '#' in test names +and/or test cases are named bug12345.phpt.</p> + +<p>NOTE: The files generated by tests can be selected by setting the environment +variable TEST_PHP_LOG_FORMAT. For each file you want to be generated use the +character in brackets as shown above (default is LEOD). The php file will be +generated always.</p> + +<p>NOTE: You can set environment variable TEST_PHP_DETAILED to enable detailed +test information.</p> + +<h2>Automated testing</h2> + +<p>If you like to keep up to speed, with latest developments and quality +assurance, setting the environment variable NO_INTERACTION to 1, will not prompt +the tester for any user input.</p> + +<p>Normally, the exit status of <code>make test</code> is zero, regardless of +the results of independent tests. Set the environment variable REPORT_EXIT_STATUS +to 1, and <code>make test</code> will set the exit status ("$?") to non-zero, +when an individual test has failed.</p> + +<p>Example script to be run by cron:</p> + +<pre> +========== qa-test.sh ============= +#!/bin/sh + +CO_DIR=$HOME/cvs/php7 +MYMAIL=qa-t...@domain.com +TMPDIR=/var/tmp +TODAY=`date +"%Y%m%d"` + +# Make sure compilation environment is correct +CONFIGURE_OPTS='--disable-all --enable-cli --with-pcre' +export MAKE=gmake +export CC=gcc + +# Set test environment +export NO_INTERACTION=1 +export REPORT_EXIT_STATUS=1 + +cd $CO_DIR +cvs update . >>$TMPDIR/phpqatest.$TODAY +./cvsclean ; ./buildconf ; ./configure $CONFIGURE_OPTS ; $MAKE +$MAKE test >>$TMPDIR/phpqatest.$TODAY 2>&1 +if test $? -gt 0 +then + cat $TMPDIR/phpqatest.$TODAY | mail -s"PHP-QA Test Failed for $TODAY" $MYMAIL +fi +========== end of qa-test.sh ============= +</pre> + +<p>NOTE: The exit status of <code>run-tests.php</code> will be 1 when +REPORT_EXIT_STATUS is set. The result of <code>make test</code> may be higher +than that. At present, gmake 3.79.1 returns 2, so it is advised to test for +non-zero, rather then a specific value.</p> + +<p>When <code>make test</code> finished running tests, and if there are any failed +tests, the script asks to send the logs to the PHP QA mailinglist. Please answer +<code>y</code> to this question so that we can efficiently process the results, +entering your e-mail address (which will not be transmitted in plaintext to any +list) enables us to ask you some more information if a test failed. Note that +this script also uploads <code>php -i</code> output so your hostname may be +transmitted.</p> + +<p> +Specific tests can also be executed, like running tests for a certain extension. +To do this you can do like so (for example the standard library): +<code>make test TESTS=ext/standard</code>. Where <code>TESTS=</code> points to a +directory containing <code>.phpt</code> files or a single <code>.phpt</code> file like: +<code>make test TESTS=tests/basic/001.phpt</code>. You can also pass options directly +to the underlaying script that runs the test suite (<code>run-tests.phpt</code>) using +<code>TESTS=</code>, for example to check for memory leaks using Valgrind, the +<code>-m</code> option can be passed along: <code>make test TESTS="-m Zend/"</code>. +For a full list of options that can be passed along, then run <code>make test TESTS=-h</code>. +</p> + +<p> +<strong>Windows users:</strong> On Windows the make command is called <code>nmake</code> +instead of <code>make</code>. This means that on Windows you will have to run +<code>nmake test</code>, to run the test suite. +</p> + <?php common_footer(); ?>