WARNING: THE DEVELOPMENT IS MOVED TO GITHUB. PLEASE USE https://github.com/kmike/django-webtest.
django-webtest is an app for instant integration of Ian Bicking's WebTest (http://webtest.pythonpaste.org/) with django's testing framework.
django-webtest provides django.test.TestCase subclass (django_webtest.WebTest) that creates webtest.TestApp around django wsgi interface and makes it available in tests as self.app.
It also features optional user argument for self.app.get and self.app.post methods to help making authorized requests. This argument should be django.contrib.auth.models.User instance or a string with user's username for user who is supposed to be logged in.
For 500 errors original traceback is shown instead of usual html result from handler500.
You also get the response.templates and response.context goodness that is usually only available if you use django's native test client. These attributes contain a list of templates that were used to render the response and the context used to render these templates. All django's native asserts ( assertFormError, assertTemplateUsed, assertTemplateNotUsed, assertContains, assertNotContains, assertRedirects) are also supported for WebTest responses.
The session dictionary is available via self.app.session, and has the content as django's native test client.
Unlike django's native test client CSRF checks are not suppressed by default so missing CSRF tokens will cause test fails (and that's good).
When a subclass of django's TransactionTestCase is desired, use django_webtest.TransactionWebTest.
All of these features can be easily set up manually (thanks to WebTest architecture) and they are even not neccessary for using WebTest with django but it is nice to have some sort of integration instantly.
See http://webtest.pythonpaste.org/ for API help. Webtest can follow links, submit forms, parse html, xml and json responses with different parsing libraries, upload files and more.
This is not intended as a replacement for Twill/Selenium or the like - it is here to allow testing against the contexts and templates produced by a view, rather than the HTML rendered to the end-user.
WebTest plays on the same field as twill. WebTest has nice API, is fast, small, talk to django application via WSGI instead of HTTP and is an easy way to write functional/integration/acceptance tests.
Twill is also a great tool and it also can be easily integrated with django (see django-test-utils package) and I also enjoy it much. But I prefer WebTest over twill because twill is old (last release is in 2007), communicate via HTTP instead of WSGI (though there is workaround for that), lacks support for unicode and have a much larger codebase to hack on. django-webtest also is able to provide access to the names of rendered templates and template context just like native django TestClient. Twill however understands HTML better and is more mature so consider it if WebTest doesn't fit for some reason.
The issue tracker is at bitbucket.