Productivity
Many tests need some form of setup action or data before you get rolling in to the test. In a good functional test you want that setup action abstracted away from the UI—having your browser run around creating setup data is slow and brittle! For example, a test retrieving a user from a system shouldn’t first drive the system around to create that user. The action of creating the user for the real portion of the test should fall to some sort of a backing API. That API might call a web service, stored procedure, or even a command line utility. ...