Testing For Scalability
Testing for scalability across multiple servers can be quite hard - load/stress testing can be quite simple though, and tools are available for that (I've heard a few good things about JMeter). Once you have some figures on how your app performs on one server, that should give you some idea of what sort of infrastructure you might need. However, having a certain performance on 1 server doesn't mean you'll get double performance with 2 servers, as you're accepting user uploads. User uploads means merging uploads across multiple servers. So you'll need to test performance across at least 2 servers, then compare how much performance improves when adding a 3rd server. If you're continously merging uploads across multiple servers you may end up getting diminishing returns with each new server added (so 10 times more servers won't mean 10 times better performance).
Designing for scalability
There are a number of things you can do to improve the scalability of you app. These include:
- Use a Content Delivery Network. If you're using JQuery for example, make sure you use google's CDN when you link the files. You can put static images on a CDN as well. Basically anything you can do to stop your servers getting hit is a good thing.
- Use proper headers like content-expires - and set the date a long time in the future so visiters use cached versions of files.
- Make use of AJAX for lazy-loading of your pages - speed is what people perceive it to be. If your main content comes across quickly, people don't notice that other parts take longer to load.
In my opinion, the most important thing is how you can scale up quickly when needed. Adding a server can take ages, and can be very expensive. One option is Windows Azure. I know you're working with PHP, but libraries are available to bridge the gap. The idea is, if you need more capacity, you can log in to your Azure admin panel, and scale up to use additional servers straight away. Then in quieter times you can scale back down to save yourself the cost. It doesn't make sense (to me, and others from the other answers i've seen) to invest in a massive infrastructure at this stage. So having an infrastructure (such as Azure) which you can take advantage of is something to consider.
I appreciate this might not answer your question completely in terms of how you test these sort of things, but maybe it'll give you some other things to think about.