Apache::Testの基本的な使い方
前回紹介した方法では、tディレクトリ以下のテストスクリプトを記述すれば、proveコマンドですぐにテストを実行できましたが、Apache::Testではテストスクリプトを記述する前に、初期設定としていくつかのファイルを作成します。
最初に作成するファイル
Apache::Testでは、Apacheの設定ファイルなどを自動的に生成してくれますが、そのためにはMakefile.PLとt/TEST.PLファイルを修正または作成しておく必要があります。
Makefile.PLはcatalyst.plコマンドでスケルトンを作成した際に自動的に生成されますが、このMakefile.PLの先頭部分を次のように書き換えます。
use strict;
# (1)'make test'と'make clean'の処理を入れ替える
use Apache::TestMM qw(test clean);
use inc::Module::Install;
# (2)'make test'時にt/TESTを使用するための準備
Apache::TestMM::filter_args();
Apache::TestMM::generate_script('t/TEST');
# 省略
ここではApache::TestMMを使用して、Makefile.PLで作成されるMakefileの処理を変更し、make testとmake cleanの処理でt/TESTスクリプトを呼び出すように定義されています。そしてt/TESTはt/TEST.PLファイルから生成されます。
Perlのモジュールをmakeする場合など、「perl Makefile.PL」を実行してMakefileを作成する例は多く見かけると思いますが、これはExtUtils::MakeMakerというモジュールを使用して実現しています。Apache::TestMMは、このExtUtils::MakeMakerへのラッパとして、Apache::Testで必要とするための機能を提供しています。
t/TEST.PLスクリプトには、Apache::TestRunPerlを実行するための処理を記述します。Apache::Testには、Apacheの設定とテストの実行を行うためのApache::TestRunクラスが含まれており、この派生クラスであるApache::TestRunPerlでは、さらにmod_perlに関する設定などを行います。
use Apache::TestRunPerl; Apache::TestRunPerl->new->run(@ARGV);
Makefile.PLとt/TEST.PLを用意できたら、アプリケーションディレクトリで「perl Makefile.PL」を実行することでMakefileやt/TESTなどのファイルが作成されます。
Apache::Testを使用したテストの実行
Makefileが作成できたら、通常の「make test」でtディレクトリ以下のテストスクリプトが実行されます。
$ perl Makefile.PL $ make (1)make testですべてのテストを実行 $ make test (2)t/TESTを使用してすべてのテストを実行 $ t/TEST (3)単体の.tテストスクリプトを実行 $ t/TEST t/01app.t
(2)のように引数無しで「t/TEST」を実行した場合にも「make test」と同様にすべてのテストを実行しますが、ソースを変更している場合には「make」で最新の状態に更新しておく必要があります。
また単体の.tテストスクリプトだけを実行したい場合には、(3)のように「t/TEST」の引数としてテストスクリプトファイルを指定します。
Windows環境では次のようにしてテストを実行します。
C:\CodeZine\ApacheSample> perl Makefile.PL C:\CodeZine\ApacheSample> nmake # ここでhttpdのフルパスを設定 C:\CodeZine\ApacheSample> nmake test # t/TESTの実行 C:\CodeZine\ApacheSample> perl t\TEST C:\CodeZine\ApacheSample> perl t\TEST t\01app.t
ActivePerlにはnmake.exeが付属しているので、それを使用してnmakeおよびnmake testを実行します。このときhttpd.exeのフルパスを聞かれますので、例えば「C:\Apache2.2\bin\httpd.exe」のように指定します。
t/TESTを実行する場合にはperl.exeの引数として渡すことで、Linux環境と同様にテストを実行できます。
make testで生成されるファイル
make testを実行すると、いくつかのファイルとディレクトリがt以下に作成されます。
| パス | 説明 |
| conf | 設定ファイルを格納するディレクトリ |
| htdocs | デフォルトのDocumentRootディレクトリ |
| logs | ログディレクトリ |
t/conf以下の*.confや*.plファイルは実行時に自動生成されるファイルのため、ここに設定値を記述しても毎回上書きされてしまいます。ServerNameやPortなどの値を変更するには次のようにt/TESTの引数として渡します。
ポート番号を8888にして起動 $ ./t/TEST -port 8888
主要なオプションには次のようなものがあります。
| オプション | デフォルト | 説明 |
| -servername | localhost | サーバ名 |
| -port | 8529 | ポート番号 |
| -minclients | 1 | クライアント数の最小値 |
| -maxclients | mixclients+1 | クライアント数の最大値 |
| -startup_timeout | 60 | サーバが起動するまでの待ち時間(秒) |
| -top_dir | $PWDで得られるパス | トップレベルディレクトリ |
| -t_dir | $top_dir/t | テストディレクトリ |
| -serverroot | $t_dir | サーバルートディレクトリ |
| -documentroot | $ServerRoot/htdocs | ドキュメントルートディレクトリ |
| -clean | 生成されたテストファイルをすべて削除 |
t/TESTで指定可能なオプションの一覧は「./t/TEST -help」で確認できます。
テスト用に一部のパラメータなどを定義したい場合には、t/conf/extra.conf.inファイルにパラメータを記述します。例えばApacheSampleアプリケーションの定義を追加するには、t/conf/extra.conf.inファイルに次のように記述します。
PerlModule ApacheSample <Location /> SetHandler modperl PerlResponseHandler ApacheSample </Location>
