Skip to content

Latest commit

 

History

History
391 lines (271 loc) · 11 KB

File metadata and controls

391 lines (271 loc) · 11 KB

NAME

HTTP::WebTest::Cookbook - ウェブページのテストのレシピ

SYNOPSIS

応用なし

DESCRIPTION

このドキュメントには HTTP::WebTest の使い方の いくつかの例を載せてあります.

特に記述がない例は実行可能なプログラム( HTTP::WebTest::API 参照) もしくは実行可能な wtscript ファイル(perldoc wt参照)です.

BASICS

(基本)

Test Static Web Pages

(静的なウェブページのテスト)

以下の wtscript ファイルは著者(訳注:原文の著者)のウェブサイト上の 静的なページをテストします:

test_name = First page
    url = http://martynov.org/
    text_require = ( Ilya Martynov's Web Site )
end_test

test_name = Mail-CheckUser page
    url = http://martynov.org/checkuser
    text_require = ( Mail-CheckUser
                     Download )
    regex_require = ( Mail-CheckUser-[\d\.]+\.tar\.gz )
end_test

同じテストの Perl スクリプト版です:

use HTTP::WebTest;

my $webtest = new HTTP::WebTest;

$webtest->run_tests(
    [ {
        test_name     => 'First page',
        url           => 'http://martynov.org/',
        text_require  => [ "Ilya Martynov's Web Site" ]
      },
      {
        test_name     => 'Mail-CheckUser page',
        url           => 'http://martynov.org/checkuser',
        text_require  => [ 'Mail-CheckUser',
                           'Download' ],
        regex_require =>
                         [ 'Mail-CheckUser-[\d\.]+\.tar\.gz' ]
      }
    ]);

Test a Login Form

(ログインフォームのテスト)

以下の wtscript ファイルは http://fsck.com/rt2/ のログインフォームを テストします:

test_name = Login page
    url = http://fsck.com/rt2/
    text_require = ( Login
                     Username:
                     Password:)
end_test

test_name = Submit wrong username & password
    url = http://fsck.com/rt2/
    params = ( user => unknownUser
               pass => somePassword )
    text_require = ( Error
                     Your username or password is incorrect )
end_test

test_name = Submit correct username & password
    url = http://fsck.com/rt2/
    params = ( user => guest
               pass => guest )
    regex_require = ( Signed in as.*?guest.*?\. )
end_test

(テスト中に URL ではなくリンクやボタンの名前を使う)

# load HTTP::WebTest::Plugin::Click module which provides test
# parameter 'click_link'
plugins = ( ::Click )

test_name = First page
    url = http://martynov.org/
    text_require = ( Ilya Martynov's Web Site )
end_test

test_name = Mail-CheckUser page
    click_link = Mail-CheckUser
    text_require = ( Mail-CheckUser
                     Download )
    regex_require = ( Mail-CheckUser-[\d\.]+\.tar\.gz )
end_test

この wtscript ファイルは http://fsck.com/rt2/ にあるログインフォームを テストします. これは と似ていますが, URL のハードコードを避けてテストパラメータ click_button を使ってフォームを送信しています:

# load HTTP::WebTest::Plugin::Click module which provides test
# parameter 'click_button'
plugins = ( ::Click )

test_name = Login page
    url = http://fsck.com/rt2/
    text_require = ( Login
                     Username:
                     Password:)
end_test

test_name = Submit correct username & password
    click_button = Login
    params = ( user => guest
               pass => guest )
    regex_require = ( Signed in as.*?guest.*?\. )
end_test

ADVANCED

(上級編)

Test::Harness Compatible Output

(Test::Harness 互換の出力)

以下の Perl スクリプトは test.wt ファイルからテスト手順を読み込み Test::Harness 互換の出力を生成します:

use Test::More qw(no_plan);
use HTTP::WebTest;

my $webtest = new HTTP::WebTest;
$webtest->run_wtscript('test.wt',
                       {
                         default_report => 'no',
                         plugins        => [ '::HarnessReport' ]
                       });

このスクリプトではレポートプラグイン HTTP::WebTest::Plugin::HarnessReport を使っています. これは Test::Harness 互換の出力を 生成するために内部で Test::Builder を使っています. これは Test::Builder を使って構築された他のテスト ライブラリ(Test::MoreTest::Differences 等)と互換であるため, 1つのテストスクリプトの中にこれらを自由に取り混ぜることができます.

User-Defined Tests

(ユーザ定義のテスト)

新しいプラグインモジュールを書かなくとも新しいテストを定義する ことができます. 以下の wtscript ファイルは Add Record テストの結果 新しいレコードがデータベースに追加されたことを調べる抜粋です.

# load HTTP::WebTest::Plugin::Hooks module which provides test
# parameters 'on_start', 'on_finish' and 'on_response'
plugins = ( ::Hooks )

on_start = {
    # initialize a database handle used later in the tests
    require DBI;
    $dbh = DBI->connect('dbi:mysql:test', 'login', 'password');
}

on_finish = {
    # disconnect from the database
    $dbh->disconnect;
}

....

test_name = Add Record
    # request to this URL with parameter 'name' adds new record
    url = http://some.server/add-record
    params = ( name => 'John' )

    # define check
    on_response = {
        my $has_record = $dbh->selectrow_array(
                             'SELECT COUNT(*) FROM USERS ' .
                             'WHERE NAME = ?',
                             undef, 'John'
                         );

        # return result of check with a comment
        [ $has_record > 0 ? 'yes' : 'no', 'Have got John' ];
    }
end_test

Dynamic Tests

(動的なテスト)

あるテストの結果を次のテストに反映したいこともあるでしょう. 次の例では Add Record がデータベースにレコードを生成て その新しいレコードのIDを含んだ HTML を発行し, Delete Record にておいて Add Record のレコードIDを使って データベースからレコードを削除します.

# load HTTP::WebTest::Plugin::Hooks module which provides test
# parameter on_response
plugins = ( ::Hooks )

....

test_name = Add Record
    # request to this URL with parameter 'name' adds new record
    url = http://some.server/add-record
    params = ( name => 'John' )

    # get ID from a page
    on_response = {
        # get webtest object
        my $webtest = shift;

        # find ID in the returned page
        ($ID) = $webtest->current_response->content =~ /ID=(\d+)/;

        # because no checks are defined a reference on empty array
        # must be returned
        [];
    }
end_test

....

test_name = Delete Record
    # request to this URL with parameter 'id' deletes record
    url = http://some.server/delete-record
    params = ( id => "$ID" )
end_test

COPYRIGHT

Copyright (c) 2001-2003 Ilya Martynov. All rights reserved.

このプログラムはフリーソフトウェアです. このプログラムは Perl 自身と同じ条件下で再配布・改変可能です.

SEE ALSO

HTTP::WebTest

HTTP::WebTest

HTTP::WebTest::API

HTTP::WebTest::API

wt

wt