Because of the number of test cases, I decided to use data driven testing to test the balancer. Currently the test data is in a MySQL database.
To verify a given test case, the resulting PHP page is compared to selected HTML code fragments in the test database. This method of verification should remain relevant when animation is added to the balancer result page.
Given these design choices, I had to choose tools to implement testing. Because I knew I was using Selenium, I narrowed down my implementation languages down to 3 choices. They were Python, Ruby and Java.
I have familiarity with Python, but because of the global interpreter locking (GIL) model it uses, concurrency is only possible by spawning separate processes. For this small set of tests (about 26 tests) Python would have served well. However, I wanted to use a solution that could lend itself easily to test partitioning on the same machine.
I am not too familiar with Ruby, but from what I have read the M implementation of Ruby uses a GIL model like Python. There is the JRuby implementation of Ruby that runs the Ruby interpreter in a JVM. So JRuby supports the Java threading model. However, there is overhead in running Ruby on top of Java, which is what JRuby essentially does.