As soon as you have a prototype. You're looking for information to help you adapt and refine your prototype. You may find you need to start over from scratch.
When you are close to your final draft. You're looking for information to make final tweaks.
When you have two options and you want to see which works better.
Who do you test?
Yourself. Always do this!
Whoever you can convince to give you a few minutes. Always do this!
Usability experts. (Heuristic evaluation.) Great if you can get it, but not necessary.
Key stakeholders. Do this only if you want to take their advice or deal with the consequences if you don't.
A representative sample of your population of users. Do this if you can afford to. You have to do this if you want to publish about it.
How many users do you test?
Use a mathematical formula to decide on your sample size based on how thorough you want to be.
Go through the Institutional Review Board if you're going to use students as test users, or if you want to publish your results.
To entice people to be test users, offer a small incentive. A $10 gift card to the local coffee shop is good. It should be enough to be a nice gesture of thanks, but not enough to be paying them for their time.
Promise to protect the test user's confidentiality and anonymity and keep the promise. Make sure the test user gives informed consent. Have it in writing and have them sign it.
Let the test user know that you want feedback, both positive and negative, and it will not hurt your feelings.
If you want the test user to narrate their thought processes and what they're doing as they go along, let them know.
Do not help the test user in any way, even if they get stuck. Getting stuck is a data point. If they are spending a lot of time without making any progress, you can suggest that they move on to the next task.
Use a script so that every test user has the same exact knowledge to start out with.