Following ‘automation’ and ‘continuous integration’ in the micro blogging world I have seen a major influx in people being super interested in functionally automating their web apps. I have seen a slew of things about Grid, and Selenium, and people hacking on Watir so I decided to show you from the ground up how incredibly easy it is to get automated test running setup using Windmill and Hudson. I am not going to walk you through every detail, this is much more high level but I do plan to start a ‘continuous integration’ page on getwindmill.com in the near future for those kinds of details.
The first step is to get a couple machines that you want use as slaves and a machine to run Hudson, our setup looks like this:
Each of the machines with a different OS has Windmill installed. To make them slaves you simply bring up the Hudson web page on the machine, and run the launcher.. now it’s a slave — crazy easy right?
Now to setup test runs for the machines, in Hudson you click: “New Job” on the left hand side and do something like the following:
Tie this job to the slave you want it to run on (we can’t have IE runs happening on MacOSX):
Tell this job to run 10 and 30 minutes after the hour:
The build steps to actually run the tests, the first kills any straggling processes (more details below):
On the Mac for the Safari job, I want to make sure there aren’t any instances of Safari left hanging, or windmill processes sitting around so we do:ps -ax | grep windmill | awk '{ print $1 }' | xargs kill | true
ps -ax | grep Safari | awk '{ print $1 }' | xargs kill | true
Then we want to grab the latest test code from svn and launch the windmill test:svn up /Users/adam/Documents/main_bt/windmill/
python /usr/local/bin/windmill safari http://www.facebook.com test=/Users/adam/Documents/main_bt/windmill/fb [email protected] password=pass report=true exit
rm /Users/adam/Library/Cookies/Cookies.plist
I am telling windmill to run a test against facebook.com, with the test hierarchy in the windmill/fb directory in Safari, with the provided email and password, then to report it’s results and exit.
The only thing different on our windows test runs is the way we kill the processes:
Example:taskkill /F /T /IM windmill.exe
taskkill /F /T /IM firefox.exe
You might be asking how do I use those variables, check it out in my setup module:
You can also read a great entry about adding reporting to your tests on Mikeal Rogers blog
And that last line removing Cookies.plist makes sure that the next test run starts without any cookies set to cause problems.
Have Hudson keep you updated on Jabber:
Grab the generated XML output so you can view the test results in Hudson:
Do this for each of the test runs you would like to have, and boom — continuous integration:
This is obviously a simple scenario, and you can do way, way more customization.. but this should get you off the ground. Happy testing!