2010/2/23 Иван Бессарабов <[email protected]> > Хочу все-таки научится по умному писать тесты. > > Вот есть у меня веб приложение, оно активно взаимодействует с базой > данных. Хочу все это обложить тестами. > Сейчас делаю так: > 1. приложение это крутится на тестовом сервере > 2. есть файл project.conf где прописаны данные для подключения к базе данных > 3. создал тестовую базу, забил в нее тестове значения и сохранил dump > 4. в файлах t/*.t есть некоторое количество тестов > 5. написал скрипт test_it.pl который: а) создает тестовую базу из > dump-а б) заменяет конфиг файл на файл с данными для подключения для > тестовой базы в) прогоняет все тесты и отображает их вывод г) > возвращает конфиг обратно > > Это все работает, но я уверен, что можно сделать лучше. > > Расскажите, пожалуйста, о вашем опыте тестирования.
Мы приблизительно так и делаем. Раньше делали на одной БД, но возникает проблема с параллельным выполнением тестов и мусором от предыдущих тестов. Теперь создаем базу с нуля для каждого теста. Медленнее, но писать тесты легче. Конечно тестировать API работы с БД хорошо, но практика показывает, что использование API тоже может с багами и тестировать web нужно. Еще вместо test_it.pl создается MyApp::Test, MyApp::Test::DB и так далее. Набор удобных функций для тестирования и установки заглушек: создание БД, перехват исходящей почты, запуск/остановка сервера, работа с конфигом, создание тестовых записей, временные директории. Идея с транзакциями мне тоже нравится. Хотя с отдельной БД под тесты не так актуальна. Раньше мы тестировали на запущенных серверах, то есть запускаешь веб сервер и тесты работают с той же БД что и сервер. Было не плохо, можно было протестировать конкретную комбинацию веб сервера и СУБД. apache1 vs apache2, mod_perl vs mod_fcgi vs external FCGI, nginx, lighttpd - большой зоопарк комбинаций в нашем случае. В последних версиях мы научились запускать apache+mod_perl и apache+fcgi помимо чисто perl'овго сервера и сразу нашли несколько багов, которые проявляются в конкретной среде. Итого: * скрипт загружает RT::Test * создаем БД с дефолтными данными * под тест создается временная директория * заглушку на почту - пишем в файл письма * создаем конфиг и лог файлы во временной директории * генерим конфиг сервера из шаблонов * по запросу запускаем сервер * исполняем тесты * не чистим временную директорию, если тесты развалились Как так, более или менее работает. Направлений для улучшений неисчислимое количество. -- Best regards, Ruslan. -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
