Web Testing with HTTP::Recorder
by Linda Julien
|
Pages: 1, 2, 3
Updating Scripts as They're Recorded
You can record many things, and then turn the recordings into scripts later, or you can make changes and additions as you go by editing the script in the Control Panel.
For example, if you record filling in this form and clicking the Submit button:
![]()
HTTP::Recorder produces the following lines of code:
$agent->form_name("form1");
$agent->field("name", "Linda Julien");
$agent->submit_form(form_name => "form1");
However, if you're writing automated tests, you probably don't want
to enter hard-coded values into the form. You may want to re-write
these lines of code so that they'll accept a variable for the value of
the name field.
You can change the code to look like this:
my $name = "Linda Julien";
$agent->form_name("form1");
$agent->field("name", $name);
$agent->submit_form(form_name => "form1");
Or even this:
sub fill_in_name {
my $name = shift;
$agent->form_name("form1");
$agent->field("name", $name);
$agent->submit_form(form_name => "form1");
}
fill_in_name("Linda Julien");
Then click the Update button. HTTP::Recorder will
save your changes, and you can continue recording as before.
You may also want to add tests as you go, making sure that the results of submitting the form were what you expected:

You can add tests to the script like this:
sub fill_in_name {
my $name = shift;
$agent->form_name("form1");
$agent->field("name", $name);
$agent->submit_form(form_name => "form1");
}
my $entry = "Linda Julien";
fill_in_name($entry);
$agent->content =~ /You entered this name: (.*)/;
is ($1, $entry);
Using HTTP::Recorder with SSL
In order to do what it does, HTTP::Recorder relies on
the ability to see and modify the contents of requests and their
resulting responses...and the whole point of SSL is to make sure you
can't easily do that. HTTP::Recorder works around this,
however, by handling the SSL connection to the server itself, and and
communicating with your browser via plain HTTP.
Caution: Keep in mind that communication between your
browser and HTTP::Recorder isn't encrypted, so take care
when recording sensitive information, like passwords or credit card
numbers. If you're running the Recorder as a proxy on your local
machine, you have less to worry about than if you're running it as a
proxy on a remote machine. The resulting script for playback
will be encrypted as usual.
If you want to record SSL sessions, here's how you do it:
Start at the control panel, and enter the initial URL there rather
than in your browser. Then interact with the web site as you normally
would. HTTP::Recorder will record form submissions,
following links, etc.
Replaying your Scripts
HTTP::Recorder getting pages, following links, filling
in fields and submitting forms, etc., but it doesn't (at this point)
generate a complete perl script. Remember that you'll need to add
standard script headers and initialize the WWW::Mechanize
agent, with something like this:
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use Test::More qw(no_plan);
my $agent = WWW::Mechanize->new();
Configuration Options
Output file. You can change the filename for the scripts
that HTTP::Recorder generates with the
$recorder->file([$value]) method. The default output
file is '/tmp/scriptfile'.
Prefix. HTTP::Recorder adds parameters to link
URLs and adds fields to forms. By default, its parameters begin with
"rec-", but you can change this prefix with the
$recorder->prefix([$value]) method.
Logger. The HTTP::Recorder distribution
includes a default logging module, which outputs
WWW::Mechanize scripts. You can change the logger with
the $recorder->logger([$value]) method, replacing it with
a logger that:
- subclasses the standard logger to provice special functionality unique to your site
- outputs an entirely different type of script
RT (Request Tracker) 3.1 by Best Practical Solutions has a Query Builder that's a good example of a page that benefits from a custom logger:


