ダウンロード サンプルファイル (49.6 KB)
Test::WWW::Mechanize::Catalyst
Test::WWW::Mechanize::Catalystは、WWW::Mechanizeを継承したテストモジュールで、タイトルやリンク情報など、HTMLのタグに関するレベルまでのテストを行うことができます。
また、ユーザーの操作をシミュレートしてボタンのクリックやフォームのサブミットを行うメソッドも用意されており、値のチェックだけではなく、複雑な操作を必要とするようなテストを記述することもできます。
Test::WWW::Mechanize::Catalystをインストールするには、rootユーザーで次のコマンドを実行します。
# perl -MCPAN -e 'install Test::WWW::Mechanize::Catalyst'
Test::WWW::Mechanize::Catalystを使用したテストの例を紹介します。次の例では、2種類のUser-Agentとして振る舞うTest::WWW::Mechanize::Catalystオブジェクトを用意し、それぞれに対して同じテストを行っています。
# 省略
use Test::WWW::Mechanize::Catalyst 'TestSample';
# テストメソッド
sub access_test {
my $mech = shift;
diag('Test for ' . $mech->agent);
# (1)'/'をGETで呼び出し、HTMLチェックとリンクチェックを行う
$mech->get_ok('/', 'Request should succeed');
$mech->html_lint_ok('HTML check');
$mech->page_links_ok('All links ok');
# (2)存在しないURL
$mech->get('/notfound');
ok($mech->status == 404, 'Not found page');
# (3)リダイレクト
$mech->get('/jump');
# いったん複製したオブジェクトのURIをチェックする必要がある
my $mech2 = $mech->clone();
ok ($mech2->uri() eq 'http://codezine.jp', 'Redirect page');
# (4)POSTした値のチェック
$mech->post_ok('/register', {name => 'john', age => 32 }, 'Register');
$mech->content_like(qr/john/, 'Check registered name');
$mech->content_like(qr/32/, 'Check registered age');
}
# (5)User-AgentをWindows版Mozillaとしてテスト
my $ua1 = Test::WWW::Mechanize::Catalyst->new;
# あらかじめ用意されているエイリアスを用いてUser-Agentを指定
$ua1->agent_alias('Windows Mozilla');
access_test($ua1);
# (6)User-Agentを携帯電話としてテスト
my $ua2 = Test::WWW::Mechanize::Catalyst->new( agent => 'DoCoMo/2.0');
access_test($ua2);
done_testing();
テストスクリプトもPerlのスクリプトなので、メソッドを定義できます。この例では、アクセステストを行うメソッドとして'access_test'を定義し、Windows版のMozillaとDoCoMoの携帯電話として振る舞うTest::WWW::Mechanize::Catalystから、access_testメソッドを呼び出しています。
(1)では、'/'に対してGETでリクエストを行い、その結果に対してHTMLの構文チェック(html_link_ok)とページのすべてのリンクに対して、リンク先にアクセスできるかどうかのチェック(page_links_ok)を行っています。
HTMLの構文チェックを行うには、HTML::Lintモジュールをあらかじめインストールしておく必要があります。
(3)のリダイレクトチェックでは、WWW::Mechanizeの制限のため、複製したオブジェクトのURIをチェックすることで、リダイレクト先に遷移しているかどうかを確認しています。
Test::WWW::Mechanize::Catalystには、POSTを行うメソッドも用意されているので、(4)のようにURLとパラメータを渡すだけで実現できます。レスポンスのチェックもcontent_likeを使うことで、正規表現による値の確認を行っています。
(5)と(6)では、それぞれ異なるUser-Agentを設定したオブジェクトを作成し、アクセステストを行っています。
Test::WWW::Mechanize::Catalystには、あらかじめいくつかのUser-Agentが登録されており、"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6"のような長いUser-Agentをエイリアスを使用して指定することができます。
Test::WWW::Mechanize::Catalystには、ここで紹介したもの以外にも多くのメソッドが定義されているので、詳しい情報はTest::WWW::Mechanize::Catalystを参照ください。
まとめ
本記事ではテスト関連のモジュールを紹介しました。Catalystでのテストについては、Catalyst::Manual::Cookbook#TestingやCatalyst::Manual::Tutorial::08_Testingにも解説がありますので、必要な折には参照ください。
実際のアプリケーションはApacheなどの環境で動作させることが多いと思いますが、今回紹介したようなテストスクリプトが、必ずしも本番環境と同じように動作するとは限りません。そこで次回は、mod_perlを使用した環境でのテスト方法について紹介していく予定です。
参考資料
- 『Catalyst-Manual-5.8004』
- 『モダンPerl入門』 牧大輔 著、翔泳社、2009年2月
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
