While I was surprised to discover that Windows Azure provided Linux VMs at a significantly cheaper rate then Windows VMs, I decided to roll with it since Python has excellent cross-platform compatibility. After getting CentOS 6, Debian 7 and Ubuntu 12 VMs running on VirtualBox, a test run of the Midas51 code showed it to be running fine in both Python and Jython (I also test with IronPython on Windows). I’m going to drop CentOS for the time being as I would like to be able to take a dependence on Python 2.7, CentOS 6 has Python 2.6.6, and installing Python 2.7 there isn’t just a simple matter of running a command to install a package.
To configure and manage the Linux VMs I used Vagrant with boxes provided by PuppetLabs. Using Vagrant and prebuilt boxes provided an awesome experience in configuring, managing, and using Linux VMs from the command line while keeping the configuration under source control. Put another way Vagrant is a developer tool for *nix VM management. One of Vagrant’s key features is making it trivially easy to configure file sharing between the host and guest filesystems. When using a non-complied language like Python this means you can make a change in your source code on your host, start your tests on your host, switch to your SSH session into your VM, and start your tests there without having to run commands to sync files.
I am also considering utilizing Fabric to create a tool to run all of my tests on my dev box and my VMs. I tried the test running frameworks Nose and Py.Test yesterday. Py.Test did not work with IronPython. Nose imposed a requirement on directory structure that meant it either wouldn’t work with my segregated sub-project structure or that it wouldn’t fulfill the purpose of using a test runner (in my mind anyway) as it would need to be executed in each and every sub-project.