I do the great majority of my web application functional testing using
HTTPUnit. This is a tool which allows familiar
JUnit tests to send HTTP requests, fetch web pages and make assertions about their contents, set and check cookes, follow links, click buttons, fill in and submit forms and so on.
This is different from usability testing in that all it tests is that the web application performs as expected, not that the way it performs makes sense or enables actual users to do what they need.