Apache...RunPHP(3pm)
π NAME π
Apache::TestRunPHP β configure and run a PHP-based test suite, bestie β¨
π¦ SYNOPSIS π¦
use Apache::TestRunPHP;
Apache::TestRunPHP->new->run(@ARGV);
πΈ DESCRIPTION πΈ
okay so real talk: the Apache::TestRunPHP package is the one that controls the configuration and running of the test suite for your PHP-based tests. literally its whole job, no cap. π
it's a subclass of Apache::TestRun, and it's basically the twin sister of Apache::TestRunPerl β same energy, same function, different language.
want the deets on the available API? go read the Apache::TestRun manpage, she has everything you need. π«Ά
π EXAMPLE π
TestRunPHP works almost identically to TestRunPerl, but if you're brand new to Apache-Test, here's your lil quick getting-started guide. and bestie, pls do check the links at the end of this doc for places to find extra details, iykyk. π₯
so bc Apache-Test is a Perl-based testing framework, we start from a Makefile.PL, which needs these lines (on top of the standard Makefile.PL parts):
use Apache::TestMM qw(test clean);
use Apache::TestRunPHP ();
Apache::TestMM::filter_args();
Apache::TestRunPHP->generate_script();
generate_script() will create a script named t/TEST β that's the gateway to the Perl testing harness, the thing that gets invoked when you call make test. and filter_args() accepts some Apache::Test-specific arguments and passes them right along, slay. β¨
for example, to point at a specific httpd installation you'd invoke Makefile.PL like this:
$ perl Makefile.PL -httpd /my/local/apache/bin/httpd
and /my/local/apache/bin/httpd will be propagated throughout the rest of the process. π«
note that PHP needs to be active within Apache prior to configuring the test framework as shown above β either by virtue of PHP being compiled into thehttpdbinary statically, or through an activeLoadModulestatement within the configuration located in/my/local/apache/conf/httpd.conf. other required modules are the (very common) mod_alias and mod_env.
now, just like with Apache::TestRun and Apache::TestRunPerl, you can place client-side Perl test scripts under t/, such as t/01basic.t, and Apache-Test will run those scripts when you call make test. π
but here's the thing that makes Apache::TestRunPHP unique β some added magic specifically tailored to a PHP environment. here are the mechanics, bestie:
Apache::TestRunPHP will look for PHP test scripts that match this pattern:
t/response/TestFoo/bar.php
where Foo and bar can be literally anything you like, and t/response/Test* is case sensitive (so watch that shift key, ok?). when this format is adhered to, Apache::TestRunPHP will create an associated Perl test script called t/foo/bar.t, which will be executed when you call make test. all bar.t does is issue a simple GET to bar.php, leaving the actual testing to bar.php. in essence, you can forget that bar.t even exists. main character energy: bar.php. π
so what does bar.php look like? here's an example:
<?php
print "1..1\n";
print "ok 1\n"
?>
if it looks odd, that's ok because it is π. I could explain to you exactly what this means, but it isn't important to understand the gory details. instead, it's sufficient to understand that when Apache::Test calls bar.php it feeds the results directly to Test::Harness, a module that comes with every Perl installation, and Test::Harness expects what it receives to be formatted in a very specific way.
by itself, all of this is pretty useless, so Apache::Test provides PHP testers with something much better. here is a much better example:
<?php
# import the Test::More emulation layer
# see
# http://search.cpan.org/dist/Test-Simple/lib/Test/More.pm
# for Perl's documentation - these functions should behave
# in the same way
require 'test-more.php';
# plan() the number of tests
plan(6);
# call ok() for each test you plan
ok ('foo' == 'foo', 'foo is equal to foo');
ok ('foo' != 'foo', 'foo is not equal to foo');
# ok() can be other things as well
is ('bar', 'bar', 'bar is bar');
is ('baz', 'bar', 'baz is baz');
isnt ('bar', 'beer', 'bar is not beer');
like ('bar', '/ar$/', 'bar matches ar$');
diag("printing some debugging information");
# whoops! one too many tests. I wonder what will happen...
is ('biff', 'biff', 'baz is a baz');
?>
the include library test-more.php is automatically generated by Apache::TestConfigPHP, and configurations are tweaked in such a way that your PHP scripts can find it without issue. π§ the functions provided by test-more.php are equivalent in name and function to those in Test::More, a standard Perl testing library, so you can go see that manpage for details on the syntax and functionality of each. β
at this point, we have enough in place to run some tests from PHP-land β a Makefile.PL to configure Apache for us, and a PHP script in t/response/TestFoo/bar.php to send some results out to the testing engine. π₯ issuing make test would start Apache, issue the request to bar.php, generate a report, and shut down Apache. the report would look something like this after running the tests in verbose mode (eg make test TEST_VERBOSE=1):
t/php/bar....1..6
ok 1 - foo is equal to foo
not ok 2 - foo is not equal to foo
# Failed test (/src/devel/perl-php-test/t/response/TestFoo/bar.php at line 13)
ok 3 - bar is bar
not ok 4 - baz is baz
# Failed test (/src/devel/perl-php-test/t/response/TestFoo/bar.php at line 17)
# got: 'baz'
# expected: 'bar'
ok 5 - bar is not beer
ok 6 - bar matches ar$
# printing some debugging information
ok 7 - baz is a baz
FAILED tests 2, 4, 7
Failed 3/6 tests, 50.00% okay
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/php/bar.t 6 3 50.00% 2 4 7
Failed 1/1 test scripts, 0.00% okay. 1/6 subtests failed, 83.33% okay.
note that the actual test file that was run was t/php/bar.t. this file is autogenerated based on the t/response/TestFoo/bar.php pattern of your PHP script. t/php/bar.t happens to be written in Perl, but you really don't need to worry about it too much. π
and as an interesting aside: if you're using perl-5.8.3 or later, you can actually create your own t/foo.php client-side scripts and they will be run via php (using our php.ini). but more on that later... π
π SEE ALSO π
the best source of information about using Apache-Test with PHP (at this time) is probably the talk given at ApacheCon 2004 (<http://xrl.us/phpperl>), as well as the code from the talk (<http://xrl.us/phpperlcode>). there's also the online tutorial <http://perl.apache.org/docs/general/testing/testing.html> which has all of the mod_perl-specific syntax and features ported to PHP with this class. obsessed with the lore honestly. πβ¨
π AUTHOR π
Apache-Test is a community effort, maintained by a group of dedicated volunteers. π«Ά
Questions can be asked at the test-dev <at> httpd.apache.org list. For more information see: http://httpd.apache.org/test/.
and that's the whole page, bestie π this one's perl v5.42.3, dated 2026-08-20, and it lives in the Apache...RunPHP(3pm) section β User Contributed Perl Documentation, periodt. ππ¦
π¦ where this page comes from
- ubuntu stonking: libapache2-mod-perl2 2.0.13-2build3 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms