A mechanism dynamically allocates physical machines (computers) for
satisfying requests for the machines, such as in the context of assigning
test machines for running test cases. Each request specifies one or more
logical machine sets it needs, and each logical machine set has specified
requirements. The physical machines are organized into a hierarchical
structure that includes groups and subgroups of machines. An allocation
engine performs the function of allocating available machines from a
selected group in the hierarchy for a request based on the requirements
of each logical machine set of the request. A group or subgroup of
machines may be marked as "allocate as one unit" and all machines in it
will be reserved for one request. A job corresponding to a request may
have sub-jobs, and machines allocated for the sub-job are selected from
the machines allocated for the parent job.