I use it everyday. Working for a top 50 web company, I’m responsible for testing a website with several hundred pages and several hundred partner sites with their own layouts, color schemes, logos, links, etc. Doing all this testing manually is simply not an option. A simple change such as updating a logo on all sites can take several hours to test manually by hand. Using an automated script, I can perform this amount of testing in about one minute.
Let me tell you about my Perl toolkit, what packages I use, how I use them, and what they can offer you.
LWP - LWP is Perl’s interface to the World Wide Web. It provides the tools you need, exposed through a variety of simple through complex interfaces, to test web sites.
LWP::Simple allows the user to grab the content of any webpage with one line of code.
$content = get('http://www.distinctquality.com/blog')
Will take the HTML returned from this blog and put it into the $content variable.
LWP::UserAgent allows you more detailed access to the LWP library. I use it to set UserAgents and modify HTTP headers before retrieving a web page. By changing the user agent, I can tell a website that my request is coming from a Blackberry device, a Firefox browser, an Internet Explorer 7 browser, a Treo, or a Motorola RAZR. If your product needs to serve different content based on the browser type, LWP::UserAgent is going to become your best friend.
WWW::Mechanize - WWW::Mechanize allows me, through a few simple lines of code to check all the links on the page, check image properties, check attributes of objects, and populate forms for testing form submissions. I can build a quick script to grab every link on a page, fetch the URL, and verify the response is a success code. If I point this type of script at a thorough site map, I can quickly test the majority of my site’s pages in the blink of an eye. For adaptive regression testing, this is a invaluable tool.
Test::More - Test::More will be the foundation of your test scripts. It allows you to quickly build a test “plan” for each script with the number of test cases and each test being evaluated as pass/fail. Its simple, but it supports test suites, allowing you to run a series of test scripts with a nice report at the end showing pass fail statistics and a list of which tests failed. Test::More allows you to run your tests in a simple manner by evaluating any statement to see if it is true or false.
($string) = ($content =~ /\
This test will pass if $string contains anything between the title tags. This would allow you to quickly test for non-null titles on all of your pages.
Test Automation with Perl is a snap. If you haven’t used it yet, I encourage you to pick up a book on the subject or take a class at your local community college. Learning the basic syntax is a breeze and you’ll be automating large amounts of tests in no time! If you have used perl for test automation and know of other perl modules that are a great help in automating tests, please leave a comment to share with the rest of the readers!
====== Addendum 2/11/2008 ======Kirk Brown over at About.com wrote a quick review about this blog post on http://perl.about.com. He mentioned it needed more good examples, so I’ve put together a *slightly* more advanced example using LWP::Simple and Test::More together to do some really basic web testing.Here is the script:------------------------------
#!/usr/bin/perl
use Test::More;
use LWP::Simple;
use strict;
plan tests => 4; # Tell Test::More that I'm planning 4 tests
# The URL I plan to test
my $url = 'http://www.msn.com';
# Uses LWP::Simple to 'get' the page content from the url
my $content = get($url); # gets HTML source via LWP::Simple
# LWP::Simple returns undefined if the request fails,
# lets test for success
ok(defined($content), "Get worked on $url");
# Lets check for the year being correct on the page by
# running a regex on the new $content variable
my ($msn_date) = ($content =~ /id="dl">.*?, .*? d+, (d+?));
# Then we’ll take the output of the regex from the page and
# make sure the year is right. If the test fails here, we may
# want input as to why it failed so we’ll add a diag line if
# the test fails
ok($msn_date == 2008, “Date shows 2008″)
diag “Date test failed, value was $msn_date”;
# Lets make sure the Privacy link is there, legal usually gets
# upset if it is missing
ok($content =~ /MSN Privacy/, “Privacy Policy link exists”);
# Then we’ll run a quick test that we’ll know the
# media folks will require
ok($content =~ /Britney Spears/, “Page contains Britney Spears story”);
——————————Here is the output:——————————
> perl msntest.t1..4ok 1 - Get worked on http://www.msn.comok 2 - Date shows 2008ok 3 - Page contains link to MSN Privacy Policynot ok 4 - Page contains requisite Britney Spears story# Failed test ‘Page contains requisite Britney Spears story’# at msntest.t line 29.# Looks like you failed 1 test of 4.
——————————
As you can see, its a simple script, but I hope it will give you some hints as to how you may want to go about using Perl to test for conditions in your own web pages.




0 comments:
Post a Comment