GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  HTTP::WEBTEST::COOKBOOK (3)

.ds Aq ’

NAME

HTTP::WebTest::Cookbook - Recipes for typical web tests

CONTENTS

SYNOPSIS

Not Applicable

DESCRIPTION

This document contains some examples of HTTP::WebTest usage.

Unless otherwise is stated all examples are either runnable programs (see HTTP::WebTest::API) or runnable wtscript files (see perldoc wt).

BASICS

    Test Static Web Pages

This wtscript file tests static pages on the author’s website:



    test_name = First page
        url = http://martynov.org/
        text_require = ( Ilya Martynovs 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:



    use HTTP::WebTest;

    my $webtest = new HTTP::WebTest;

    $webtest->run_tests(
        [ {
            test_name     => First page,
            url           => http://martynov.org/,
            text_require  => [ "Ilya Martynovs 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

This wtscript file tests the login form at 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



    Using link and button names instead of URLs in tests

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:



    # 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 Martynovs 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:



    # 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

This Perl script reads a test specification from file test.wt and generates Test::Harness compatible output:



    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.

    User-Defined Tests

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.



    # 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

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.



    # 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.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

HTTP::WebTest

HTTP::WebTest::API

wt

Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 HTTP::WEBTEST::COOKBOOK (3) 2003-03-02

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.