In order to automate hundreds or thousands of end-to-end tests, and run them concurrently, we need a testing environment with the following characteristics: