1. A method for scheduling tests to run on one or more computing resources, said method comprising: receiving data specifying a configuration and availability of said one or more computing resources, one or more said computing resources A being partitionable into sub-units; receiving data including users specified tasks, and expected durations of said specified tasks to run on said one or more said computing resources or sub-units thereof; assigning, based on said data and machines availability, users tasks to computing resources, computing resource sub-units, and time slots; and generating a first initial schedule based on said assignments, said first initial schedule including tasks that remain unassigned; applying to said first initial schedule a local improvements optimization that assigns user tasks to computing resources sub-units and time slots, said assigning accounting for user preferences for said resources and time slots; and, generating a final task schedule based on said applied local improvements.