名前¶
HTTP::WebTest::Cookbook - Recipes for typical web tests
HTTP::WebTest::Cookbook - ウェブページのテストのレシピ
概要¶
Not Applicable
応用なし
説明¶
This document contains some examples of HTTP::WebTest usage.
このドキュメントには HTTP::WebTest の使い方の いくつかの例を載せてあります.
Unless otherwise is stated all examples are either runnable programs (see HTTP::WebTest::API) or runnable wtscript files (see perldoc wt).
特に記述がない例は実行可能なプログラム( HTTP::WebTest::API 参照) もしくは実行可能な wtscript ファイル(perldoc wt参照)です.
基本¶
静的なウェブページのテスト¶
This wtscript file tests static pages on the author's website:
以下の 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
The same tests in the form of a Perl script:
同じテストの 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' ]
}
]);
ログインフォームのテスト¶
This wtscript file tests the login form at http://fsck.com/rt2/:
以下の 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 ではなくリンクやボタンの名前を使う¶
This wtscript file tests static pages on the author's website. It is similar to the example in section "Check Static Website" but it uses the test parameter click_link
to specify the link to be followed on the next test request instead of a hardcoded URL:
この wtscript ファイルでは著者のウェブサイトの静的なページをテストします. これは と 似ていますが, テストパラメータ click_link
に次に要求されるテストを 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
This wtscript file tests the login form at http://fsck.com/rt2/. It is similar to the example in section "Check Login Form" but avoids using a hardcoded URL for the page the form should be submitted to by using the test parameter click_button
:
この 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
上級編¶
Test::Harness 互換の出力¶
This Perl script reads a test specification from file test.wt
and generates Test::Harness compatible output:
以下の 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' ]
});
This script uses reporting plugin HTTP::WebTest::Plugin::HarnessReport which internally uses Test::Builder module to generate Test::Harness compatible output. It should be compatible with other testing libraries built using Test::Builder (like Test::More or Test::Differences) so you can freely intermix them in one test script.
このスクリプトではレポートプラグイン HTTP::WebTest::Plugin::HarnessReport を使っています. これは Test::Harness 互換の出力を 生成するために内部で Test::Builder を使っています. これは Test::Builder を使って構築された他のテスト ライブラリ(Test::More や Test::Differences 等)と互換であるため, 1つのテストスクリプトの中にこれらを自由に取り混ぜることができます.
ユーザ定義のテスト¶
It is possible to define new tests without writing new plugin module. This is a fragment of a wtscript file that checks if a new record has been inserted into a database as a result of the Add Record test.
新しいプラグインモジュールを書かなくとも新しいテストを定義する ことができます. 以下の 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
動的なテスト¶
Sometimes you want to feed the results of a previous test into the next test. In this example, Add Record
creates a database record, emits HTML containing the new record ID, and Delete Record
deletes the database record using the record ID from Add Record
.
あるテストの結果を次のテストに反映したいこともあるでしょう. 次の例では 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 (c) 2001-2003 Ilya Martynov. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
このプログラムはフリーソフトウェアです. このプログラムは Perl 自身と同じ条件下で再配布・改変可能です.