Really depends on what you're trying to test... for me, there's nothing like having a PC with multi-boot setup for testing. Why? ...because depending on the software that you're testing, if you find issues in the Virtual Machine, then you have to determine whether the issue comes from the virtualization process or if it's a real bug within your code. You also tend to spend a lot of time setting up a virtual system the way you need it, so IMO, for testing, it's worth it in the long run to just get a system you can boot into multiple OS's. I had a single, cheap server that I had set up to boot into three different versions of Windows Server, worked great for testing and I never had a doubt whether any extra layers were causing an issue. Of course, virtualization has its benefits.... you always have a clean copy of the OS running (if that's what you want/need) and you can easily change OS's with little downtime. Cloud based solutions tend to pretty much be virtual machines too.. so the only added benefit is the hosting is managed by someone else. Recurring costs are the drawback. Plus depending on your application, you may not want it hosted on the cloud, where someone else's sloppy security might affect you down the road.