| |
| Testing Apache with the Perl Test Harness |
| Prerequisites |
| ------------- |
| You'll need to install the CPAN modules listed in: |
| Apache-Test/lib/Bundle/ApacheTest.pm |
| All you have to do to install them all in one shot is: |
| perl -MCPAN -e 'install Bundle::ApacheTest' |
| |
| Which are also available in one tarball here: |
| http://perl.apache.org/~dougm/httpd-test-bundle-0.02.tar.gz |
| |
| Note: Crypt::SSLeay requires OpenSSL to be installed (only required |
| for t/TEST -ssl): http://www.openssl.org/ |
| |
| For an extensive documentation see |
| http://perl.apache.org/docs/general/testing/testing.html |
| or |
| http://cvs.apache.org/viewcvs.cgi/modperl-docs/src/docs/general/testing/testing.pod |
| |
| Quick Start |
| ----------- |
| |
| If you don't care how it works and just want to run the tests, here's |
| how you go about doing that. |
| |
| 1. You need an installation of Apache. (Either 1.3 or 2.0) |
| 2. Any DSOs you wish to use should be configured in that Apache's |
| httpd.conf (the test harness will pick this configuration up) |
| 3. Setup: |
| perl Makefile.PL -apxs /path/to/apache/bin/apxs |
| 4. Run the tests: |
| t/TEST |
| 5. Evaluate test output. |
| |
| |
| Getting a little deeper |
| ----------------------- |
| |
| The test harness will run every .t file under the t/ directory. So |
| let's say you only want to run the tests for PHP. Do this: |
| t/TEST -httpd /path/to/apache/bin/httpd t/php |
| |
| That will start the test server, run the .t tests under t/php and shut |
| down the test server. You can also control each of these steps. |
| |
| This will start the test server: |
| t/TEST -httpd /path/to/apache/bin/httpd -start |
| |
| This will run the PHP tests in the test environment: |
| t/TEST t/php |
| |
| This will stop the test server: |
| t/TEST -stop |
| |
| This will run the server under gdb (using -X): |
| t/TEST -d gdb |
| |
| Note: At this point, you have a working test environment. You can |
| look in t/conf for the test server configuration files. These are |
| generated by the test harness. Once you have a working test |
| environment, you do not need to specify 'httpd' on the t/TEST command |
| line. For instance, to start the server up again, the command |
| t/TEST -start |
| would be sufficient. |
| |
| Smoking Tests |
| ------------- |
| |
| Sometimes it's possible that the test is passing properly for the |
| first time, when it's run for the first time in the thread. But when |
| you run it again, the test might fail. It's important to run the |
| repetition smoke testing. For example to repeat the tests 5 times you |
| can run: |
| |
| t/TEST -times=5 |
| |
| It's also possible that a test will pass when it's run after a |
| particular test, but if moved to run after a different state it may |
| fail. For this reason it's important to ran the randomization smoking |
| testing with -order=random option. |
| |
| Since it's important to be able to reproduce the problem with the |
| random testing, whenever -order=random is used, the used seed is |
| printed to STDERR. Which can be then fed into the future tests with: |
| via APACHE_TEST_SEED environment variable. |
| |
| Combining these two important smoke testing techiques, one can run |
| tests with: |
| |
| t/TEST -times=N -order=(repeat|rotate|random) |
| |
| So the tests can be repeated N times, and run in the following three |
| modes: |
| |
| - randomize all tests |
| - repeat the same test N times in sequence |
| - rotate the whole tests suite N times |
| |
| If you want this process to be automated, run: |
| |
| t/SMOKE |
| |
| for configuration options and default settings run: |
| |
| t/SMOKE -help |
| |
| For more information refer to the Apache::TestSmoke manpage. |
| |
| |
| Test Environment Configuration |
| ------------------------------ |
| |
| The test server is configured with conf files like any normal Apache |
| server. The tricky part is those conf files are generated by the |
| harness just prior to starting the server. t/conf/httpd.conf is |
| generated by t/conf/httpd.conf.in. If that does not exist, the |
| harness will generate a working configuration and will include |
| LoadModule (and AddModule for Apache 1.3) directives from the |
| httpd.conf associated with the httpd binary you are using for testing. |
| If t/conf/extra.conf.in exists, t/conf/extra.conf will be generated |
| from that, and an Include directive for that file will be put in the |
| generated t/conf/httpd.conf. t/conf/apache_test_config.pm is |
| generated from the test configuration. It contains all the |
| information about the configuration of your test server. You can |
| access this information in test scripts by: |
| my $env = Apache::TestConfig->thaw; |
| Apache::TestConfig access apache_test_config.pm and returns a hash |
| reference with all the information. Look through |
| apache_test_config.pm, it's a lot of stuff. Once these conf files are |
| generated, you have a working test environment, and they must be |
| 'cleaned' if you wish to make chages to them. To clean the |
| environment: |
| t/TEST -clean |
| (Now you will have to specify your httpd binary when starting back up |
| again.) |
| |
| |
| More Information |
| ---------------- |
| |
| For more information on using the test harness and writing tests, see |
| the README in Apache-Test and the examples in Apache-Test/t. |
| |
| The test harness was written by Doug MacEachern and is discussed on |
| the modperl dev mailing list (dev@perl.apache.org). |
| |
| It is also included in modperl-2.0 source along with tests for |
| modperl-2.0. |