diff --git a/tests/test_testing.py b/tests/test_testing.py
index 7947150..e88f493 100644
--- a/tests/test_testing.py
+++ b/tests/test_testing.py
@@ -21,13 +21,17 @@ def test_testing():
     assert res.status_int == 200
     assert res.headers['content-type'] == 'text/plain'
     assert res.content_type == 'text/plain'
+    res = app.head('/')
+    assert res.status_int == 200
+    assert res.headers['content-type'] == 'text/plain'
+    assert res.headers['content-length'] <> '0'
+    assert res.body == ''
     raises(Exception, app.get, '/?error=t')
     raises(webtest.AppError, app.get, '/?status=404%20Not%20Found')
     app.get('/?status=404%20Not%20Found', status=404)
     raises(webtest.AppError, app.get, '/', status=404)
     res = app.get('/?status=303%20Redirect&header-location=/foo')
     assert res.status_int == 303
-    print res.location
     assert res.location == 'http://localhost/foo'
     assert res.headers['location'] == '/foo'
     res = res.follow()
diff --git a/webtest/__init__.py b/webtest/__init__.py
index 66c150a..189c5d2 100644
--- a/webtest/__init__.py
+++ b/webtest/__init__.py
@@ -129,6 +129,46 @@ class TestApp(object):
 
         Returns a ``webob.Response`` object.
         """
+
+        return self._get("GET", url, params, headers, extra_environ, status,
+                         expect_errors)
+
+    def head(self, url, params=None, headers=None, extra_environ=None,
+             status=None, expect_errors=False):
+        """
+        Head on the given url (well, actually a path like
+        ``'/page.html'``).
+
+        ``params``:
+            A query string, or a dictionary that will be encoded
+            into a query string.  You may also include a query
+            string on the ``url``.
+
+        ``headers``:
+            A dictionary of extra headers to send.
+
+        ``extra_environ``:
+            A dictionary of environmental variables that should
+            be added to the request.
+
+        ``status``:
+            The integer status code you expect (if not 200 or 3xx).
+            If you expect a 404 response, for instance, you must give
+            ``status=404`` or it will be an error.  You can also give
+            a wildcard, like ``'3*'`` or ``'*'``.
+
+        ``expect_errors``:
+            If this is not true, then if anything is written to
+            ``wsgi.errors`` it will be an error.  If it is true, then
+            non-200/3xx responses are also okay.
+
+        Returns a ``webob.Response`` object.
+        """
+        return self._get("HEAD", url, params, headers, extra_environ, status,
+                         expect_errors)
+
+    def _get(self, method, url, params=None, headers=None, extra_environ=None,
+            status=None, expect_errors=False):
         environ = self._make_environ(extra_environ)
         # Hide from py.test:
         __tracebackhide__ = True
@@ -145,6 +185,7 @@ class TestApp(object):
             url, environ['QUERY_STRING'] = url.split('?', 1)
         else:
             environ['QUERY_STRING'] = ''
+        environ['REQUEST_METHOD'] = method
         url = self._remove_fragment(url)
         req = TestRequest.blank(url, environ)
         if headers:
diff --git a/webtest/debugapp.py b/webtest/debugapp.py
index 885f137..308ca0c 100644
--- a/webtest/debugapp.py
+++ b/webtest/debugapp.py
@@ -28,8 +28,10 @@ def debug_app(environ, start_response):
         if name.startswith('header-'):
             header_name = name[len('header-'):]
             headers.append((header_name, value))
+    print req.method
+    print headers
     start_response(status, headers)
-    return [body]
+    return [body] if req.method <> "HEAD" else [""]
 
 def make_debug_app(global_conf):
     """

