Test::HTTP - Test HTTP interactions.
use Test::HTTP tests => 9; { my $uri = "$BASE/data/page/Foo_Bar_Baz"; my $type = 'text/x.waki-wiki'; my $test = Test::HTTP->new('HTTP page creation and deletion'); $test->get($uri, [Accept => $type]); $test->status_code_is(404, "Page not yet there."); $test->put($uri, ['Content-type' => $type], 'xyzzy'); $test->status_code_is(201, "PUT returns 201."); # Created $test->header_is( 'Content-type' => $type, "Content-type matches on PUT."); $test->header_like( Location => qr{^$BASE/data/page/}, "Created page location makes sense."); $test->body_is('xyzzy'); $test->get($uri, [Accept => $type]); $test->status_code_is(200, "Page is now there."); $test->header_is( 'Content-type' => $type, "Content-type matches on GET."); $test->body_is('xyzzy'); $test->delete($uri); $test->status_code_is(204, "DELETE returns 204."); # No content }
Test::HTTP is designed to make it easier to write tests which are mainly about HTTP-level things, such as REST-type services.
Each Test::HTTP object can contain state about a current request and its response. This allows convenient shorthands for sending requests, checking status codes, headers, and message bodies.
Test::HTTP
$name is a name for the test, used to help write test descriptions when you don't specify them.
$name
You can get/set any of these by saying $test->foo or $test->foo(5), respectively.
$test->foo
$test->foo(5)
The name for the test.
The current HTTP::Request being constructed or most recently sent.
The most recently received HTTP::Response.
The User Agent object (usually an LWP::UserAgent).
A username and password to be used for HTTP basic auth. Default to the values of $Test::HTTP::BasicUsername and $Test::HTTP::BasicPassword, respectively. If both are undef, then authentication is not attempted.
$Test::HTTP::BasicUsername
$Test::HTTP::BasicPassword
Any of these methods may be used to do perform the expected HTTP request. They are all equivalent to
$obj->run_request(METHOD => ARGS);
If there are any arguments, they are all passed to the HTTP::Request constructor to create a new $test->request.
$test->request
$test->request is then executed, and $test->response will hold the resulting HTTP::Response.
$test->response
Set up a new request object as in run_request, but do not execute it yet. This is handy if you want to call assorted methods on the request to tweak it before running it with $test->run_request.
$test->run_request
Compares the last response status code with the given code using Test::Builder-is>.
Test::Builder-
Compares the response header $header_name with the value $value using Test::Builder-is>.
$header_name
$value
Compares the response header $header_name with the regex $regex using Test::Builder-like>.
$regex
Verifies that the HTTP response body is exactly $expected_body.
$expected_body
Compares the HTTP response body with $regex.
The user agent (UA) is created when the Test::HTTP object is constructed. By default, LWP::UserAgent is used to create this object, but it may be handy to test your HTTP handlers without going through an actual HTTP server (for speed, e.g.), so there are a couple of ways to override the chosen class.
If the environment variable TEST_HTTP_UA_CLASS is set, this value is used instead. If not, then the current value of $Test::HTTP::UaClass (LWP::UserAgent by default) is used. Thus, the incantation below may prove useful.
TEST_HTTP_UA_CLASS
$Test::HTTP::UaClass
LWP::UserAgent
{ local $Test::HTTP::UaClass = 'MyCorp::REST::FakeUserAgent'; my $test = Test::HTTP->new("widget HTTP access"); # ... }
http://www.w3.org/Protocols/rfc2616/rfc2616.html, LWP::UserAgent, HTTP::Request, HTTP::Response, Test::More, prove(1)
Socialtext, Inc. <code@socialtext.com>
<code@socialtext.com>
Copyright 2006 Socialtext, Inc., all rights reserved.
Same terms as Perl.
To install Test::HTTP, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test::HTTP
CPAN shell
perl -MCPAN -e shell install Test::HTTP
For more information on module installation, please visit the detailed CPAN module installation guide.