nDiki : WWW::Mechanize::CGI
スポンサード リンク
Related term
2006年2月18日 (土)
■ Perl CGI プログラムのテストには WWW::Mechanize::CGI を

CGI プログラムを書いていて、いつも困るのがリグレッションテスト。
パッケージのビルド時に実行するテストスーツ (make check / make test 用テストプログラム群) に含めておきたいが、さすがにその場で Web サーバの下へセットアップするわけにもいかない。 ミニ Web サーバを同梱してテストスーツ内で起動する方法はちょっとおおがかかりだし、ポート番号の選択やらサーバの停止の問題もあって、かなり面倒。
結局、テストスーツの中で環境変数や標準入力など CGI リクエスト環境をセットアップして、CGI プログラムを実行するという王道(?)かつ泥臭いテストを書くことになったりする。
何かいいものはないかと探していたところ、WWW::Mechanize::CGI というものをみつけた。
LWP::UserAgent を継承した WWW::Mechanize モジュールは Web ブラウジングを容易にする有名どころのモジュールである。
WWW::Mechanize::CGI モジュールはさらにこれを拡張したモジュールで、HTTP リクエストを、仮想的に CGI プログラムやサブルーチンへの呼出しにしてくれる。 これを用いるとあたかも Web サーバ上の CGI プログラムにリクエストしレスポンスを受けとっているかのように、テストプログラムを書くことができる。
素晴しい。
さっそく WiKicker のテストを書き換えてみた:
use Test::More tests => 2;
use WiKicker::WikICGI::Controller;
use WWW::Mechanize::CGI;
use File::Temp qw(tempdir);
use File::Spec;
my $www_dir = tempdir(CLEANUP => 1);
my $mech = WWW::Mechanize::CGI->new;
$mech->cgi(sub {
$ENV{PATH_INFO} = '' if $ENV{PATH_INFO} eq '/';
WiKicker::WikiCGI::Controller->new->run});
$mech->env($mech->env,
SCRIPT_FILENAME => File::Spec
->catfile($www_dir . '/wiki'),
SCRIPT_NAME => '/wiki');
my $response = $mech->get('http://localhost/wiki');
ok($response->is_success);
like($response->content,
qr|<title>WikiForum\[WiKicker\]: FrontPage</title>|);
WWW::Mechanize::CGI オブジェクトを new した後、cgi メソッドで CGI サブルーチンを指定するか、cgi_application メソッドで外部 CGI プログラムを指定する。 ここでは直接、CGI サブルーチン (WiKicker::WikiCGI::Controller->new->run を実行)を指定した。
なおここで WWW::Mechanize::CGI が使っている HTTP::Request::AsCGI 0.5 における PATH_INFO の扱いが Apache などとは違って、空でも必ず '/' が入るようになっている。 これだと WiKicker では困るので、サブルーチンのところで修正している。
後は必要ならば WWW::Mechanize::CGI::env で、追加の環境変数設定を行っておく。
セットアップが済めば通常の WWW::Mechanize と同様に get 等でリクエストを行いレスポンスを受けとることができるようになる。
いい。しばらく試してみて不具合がなさそうなら、定番のテストスタイルにしたい。
ちなみに Test::Harness 用の Test::WWW::Mechanize にあわせて、Test::WWW::Mechanize::CGI というものもある。 これらを用いるとさらにテストを書くのが楽になるが、依存するモジュールも多いので無理に使わないほうがいいかもしれない。
- Test::WWW::Mechanize で Web アプリケーションをテ... (2006-09-13)
- 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf (2006-07-15)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- CGI プログラム、Out of memory! に泣く (2001-01-04)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
2006年3月2日 (木)
■ WiKicker へのセッション管理/認証/承認機能追加開始

書き始めると結構なコード追加になりそうな感じ。
上記機能を使わないオープンな Wiki としてももちろん使えるようにしておきたいので、その辺り慎重にコーディングしていく必要あり。 現在 WiKicker が持っているサーバサイドセッション管理をともなわない、Cookie オンリーのプリファレンス機能との連携をどうするかも課題。
それにしてもやはり、WWW::Mechanize::CGI 便利だわ。
- Intercepting Filter パターンとレスポンスの順次送信 (2006-02-28)
- WiKicker 0.30 リリース - トップページのページ名を変更でき... (2006-05-22)
- DBIx::Class + SQLite で Wiki 用認証/承認データベース (2006-06-18)
- WiKicker 0.37 リリース - 主に添付関連の機能を改良 (2006-09-05)
- WiKicker 0.38 リリース - 認証・承認用コードの実装 (2006-09-14)
2006年7月15日 (土)
■ 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf

- CGI.pm のデバッグ機能を用いたテスト
- WWW::Mechanize::CGI を用いた直接呼出しによるテスト
- WWW::Mechanize のテストのように自前で Perl で書かれたテスト用ミニサーバを立てる
- Apache から実行できるように配置して、Test::WWW::Mechanize でテスト
- Apache から実行できるように配置して、HTTP::WebTest でテスト
などがある。 Apache を使うのがより実際の環境に近いテストができるのだが、通常動いている Apache を使って make test でテストできるようにするとすると「どこに配置するか」などの問題がでてくる。
となればいっその事、自分(一般ユーザ)で専用に Apache を起動した方が良さそうだ。 httpd.conf を用意するのが面倒だが、highperformance.conf 等をみる限り実はそれほど必須の設定は多くないようである。
@ httpd.conf を書く
ということで Debian GNU/Linux sid の Apache (2.0.55-4) で必要な設定は何か試してみた。少なくとも以下の設定は書いておく必要があるようだ。
# httpd.conf for Debian GNU/Linux Apache 2.0.55-4 Listen 9100 ServerRoot . DocumentRoot /home/naney/htdocs ErrorLog error_log TypesConfig /etc/mime.types PidFile apache2.pid
これを httpd.conf として保存して、
/usr/sbin/apache2ctl -f httpd.conf
で起動すればアクセスできるようになる。
/usr/sbin/apache2ctl -f httpd.conf -k stop
で停止。
ServerRoot は起動時の -d オプションでも指定できるのだが、httpd.conf に書いておかないとうまく起動してくれなかった (-X を一緒に指定してデバッグモードにする場合は ServerRoot 無しに -d 指定だけでも動く)。
@ CGI プログラムを動くようにする。
CGI プログラムを動くようにするとすると例えば次のような感じ。
# httpd.conf for Debian GNU/Linux Apache 2.0.55-4 Listen 9100 ServerRoot . DocumentRoot /home/naney/htdocs ErrorLog error_log TypesConfig /etc/mime.types PidFile apache2.pid LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so Options +ExecCGI AddHandler cgi-script .cgi
@ make test で動くようにするには……
ディストリビューション独自のパッケージングなどに対応するように、多少泥臭く環境検出する必要があるが、なんとか make test から呼べそうだな。
最近は WWW::Mechanize::CGI がお気に入りなのだが、2つ以上の CGI プログラムにまたがるようなアプリケーションのテストには向かなさそうなので、今度この方法でも試してみたい。
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- SpiderMonkey の素のインタプリタでは CGI プログラムには役立たず (2006-12-11)
- [ WiKicker ] SpeedyCGI (2003-10-17)
- [ WiKicker ] SunOS 5.6 にインストール (2003-04-23)
- DBD::Oracle 1.16 を Debian GNU/Linux s... (2005-05-19)
2006年9月13日 (水)
■ Test::WWW::Mechanize で Web アプリケーションをテストファースト開発

テストファースト開発に慣れてしまうと、テストコード無しにプログラムを書くというのは不安でたまらなく感じてくる。
テストが欲しい。安らぎが欲しい。
今開発している WiKicker ベースの Web アプリケーションもだんだん機能が増えてきて、コードを触るのがコワくなってきた。
今回は Basic 認証等もあるので、WWW::Mechanize::CGI ではなくてきちんと deploy してから Test::WWW::Mechanize でテストすることにした。
Test::WWW::Mechanize、使ってみると WWW::Mechanize + Test::More よりテストを書くのも読むのも楽になった。
deploy が必要なリグレッションテストはさすがに t/ の下に入れておくのはどうかと思う。 プロジェクト的にはビルドサーバを用意して、そこで自動的にテストできるような環境を用意するのが良さそうだ。
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf (2006-07-15)
- SQLite とか DbUnit とか (2005-05-23)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
スポンサード リンク
■よく検索されるキーワード
perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 0.191901s / load averages: 0.24, 0.18, 0.17
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク