1. можно поднять веб-сервер в отдельном потоке или процессе, этот веб-сервер может эмулировать работу сайта. конкретных вариантов, как это сделать, очень много: threading, multiprocessing, использование библиотек типа gevent или twisted
2. есть море программ, которые позволяют сделать «копию» сайта. самый простой вариант — наверное, wget, он можно вытянуть едва ли не весь сайт одной командой, умеет ходить по ссылкам. дальше поднимается веб-сервер (возможно одним из вариантов, упомянутых в 1) и на этом чуде можно тестироваться
3. если говорить про виртуалки, то это вполне рабочий вариант, для тестирования питонячих приложений должно хватить по 256мб на машину, 4 машины — это гигабайт оперативки, что вполне подъемно для любой тачки с 4гб памяти. если же хочется чего-то попроще, то ничто не мешает, как уже упоминали, просто коннектиться к локалхосту, программы запускаются или в разных процессах, или даже в разных потоках. для тестирования падений сети, задержек, дисконнектов и прочего можно использовать самописные tcp прокси (мы так и делаем), проксей можно очень по-разному управлять, эмулирую самые разные «печальные» ситуации
зы. несколько виртуалок можно легко поднять с помощью vagrant, а установить на них нужный софт можно с помощью puppet, chef, salt — по вашему вкусу