SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(9)
Catalystのテスト関連モジュール

Catalystでテストを作成・実行

Test::WWW::Mechanize::Catalyst

 Test::WWW::Mechanize::Catalystは、WWW::Mechanizeを継承したテストモジュールで、タイトルやリンク情報など、HTMLのタグに関するレベルまでのテストを行うことができます。

 また、ユーザーの操作をシミュレートしてボタンのクリックやフォームのサブミットを行うメソッドも用意されており、値のチェックだけではなく、複雑な操作を必要とするようなテストを記述することもできます。

 Test::WWW::Mechanize::Catalystをインストールするには、rootユーザーで次のコマンドを実行します。

[リスト16]Test::WWW::Mechanize::Catalystのインストール
# perl -MCPAN -e 'install Test::WWW::Mechanize::Catalyst'

 Test::WWW::Mechanize::Catalystを使用したテストの例を紹介します。次の例では、2種類のUser-Agentとして振る舞うTest::WWW::Mechanize::Catalystオブジェクトを用意し、それぞれに対して同じテストを行っています。

[リスト17]01mech.t
# 省略
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#TestingCatalyst::Manual::Tutorial::08_Testingにも解説がありますので、必要な折には参照ください。

 実際のアプリケーションはApacheなどの環境で動作させることが多いと思いますが、今回紹介したようなテストスクリプトが、必ずしも本番環境と同じように動作するとは限りません。そこで次回は、mod_perlを使用した環境でのテスト方法について紹介していく予定です。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5085 2010/05/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー