Has anyone any experience of setting up a CI server (team city for preference) to manage the creation of a virtual machine, deploying a package to the machine, getting the database to a known configuration then running integration tests. Tearing down the whole thing and reporting back to Team city the test status?
1 Answers
We do something like this, we have three types of tests. Unit tests which I am sure you are aware of but we also run a number of Acceptance Tests and Integration Tests and it is the latter to that are relevant.
In our integration tests we run a series of WatiN tests against our QA environment which is known to have an environment already running on it, these are usually run after TeamCity runs a deployment build to the QA environment. These tests do a full integration against all our external third parties.
What you might be more interested in is our Acceptance Tests but point to note we do not spin up a virtual environment (more on that later). We have a series of acceptance tests that spin up all the services in their own application domains and deploy database using visual studio database projects. Because these are acceptance tests all third party interfaces are mocked. Since the services are spun up in process the only thing to clean up at the end are the databases.
This works for us but I have been considering taking it to the next level with out integration tests and spinning up a virtual environment that looks exactly like our live environment down to domain names and IP addresses and this is entirely feasible but will be time consuming to do but will depend on the flavor of virtual environment you plan on using.
Here is an answered SO question on how to spin up Hyper-V servers using MSBuild but I am sure there are other examples using Ant/Nant/Rake for Hyper-V/VMWare etc.