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>