Я пишу некоторый код тестирования на проекте Drupal 6, и я не могу верить, как медленный эти тесты, кажется, работают после работы с другими языками и платформами как Ruby on Rails или Django.
Drupal.org думает, что этот вопрос является спамом и не даст мне способ доказать, что я человек, таким образом, я фигурировал ТАК следующее основное место, которое задаст вопрос как это и получит проверку работоспособности на моем подходе к тестированию.
Следующий тестовый код в этой сути относительно тривиален.
Короче говоря я:
И вот вывод, когда я запускаю эти тесты из командной строки:
Drupal test run
---------------
Tests to be run:
- (ClientProjectTestCase)
Test run started: Thu, 29/07/2010 - 19:29
Test summary:
-------------
ClientProject feature 52 passes, 0 fails, and 0 exceptions
Test run duration: 2 min 9 sec
Я пытаюсь запустить тесты как это, прежде чем я продвину код к центральному repo каждый раз, но если он берет это долго это рано на проекте, я боюсь думать об этом далее по линии, когда у нас есть еще больше тестовых сценариев.
Что я могу сделать для ускорения этого?
Я использую MacbookPro с:
Я понимаю, что в примерах выше загружаю Drupal каждый раз, и это - очень дорогая операция, но это не не слышат с другими платформами, как Ruby on Rails или Django, и я не понимаю, почему это составляет в среднем немногим более, чем в минуту на тестовый сценарий на этом проекте.
Существует достойный список приемов здесь для ускорения Drupal 7, многие из которых похожи, они относились бы к Drupal 6 также, но у меня еще не было шанса судить их все же, и было бы замечательно услышать, как они удались для других, я натыкаюсь вниз дальнейшие тупики,
Что работало на Вас, когда Вы работали с Drupal 6 в этой ситуации, и где быстрые победы для этого?
Одна минута на тестовый сценарий, когда я ожидаю к легко больше чем ста тестовым сценариям, чувствует себя безумной.
Похоже, что наибольшее увеличение скорости произойдет за счет запуска тестовой базы данных на оперативном диске, на основе этой публикации здесь Советы по настройке производительности для тестирования Drupal 7 на qa.drupal .org
DamZ написал модифицированный сценарий mysql init.d для /etc/init.d/mysql в Debian 5, который полностью запускает базы данных MySQL из tmpfs. Он находится по адресу http://drupal.org/files/mysql-tmpfs.txt , прикреплен к http://drupal.org/node/466972 .
Это позволило двухъядерной четырехъядерной машине перейти от 50-минутного теста и огромного дискового ввода-вывода с InnoDB до примерно 3 минут на тест. Сейчас он находится под номером 32 на PIFR v1 для тестирования. D.o. Это, безусловно, единственный выход.
Я не пробовал и не буду пробовать его на InnoDB в ближайшее время, если кто-то захочет пропустить шаг по skip-innodb ниже и попробовать его на tmpfs.
Также здесь есть некоторые инструкции по созданию RAM-диска в OS X , хотя это для перемещения всего вашего запаса баз данных mysql на RAM-диск, а не только одну базу данных:
. Мне удалось сократить время тестирования на 30-50%, переключившись на RAM-диск. Вот шаги, которые я предпринял:
Я выбрал гигабайт в основном потому, что у меня 4 ГБ оперативной памяти, и я не уверен, сколько места мне может понадобиться, поэтому я Я перестраховываюсь:
diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2048000`
Затем я запустил сценарий установки mysql, чтобы установить mysql на новый ramdisk
/usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql \
--datadir=/Volumes/ramdisk
Затем я предпринял следующие шаги: Я убедился, что предыдущий mysqld больше не работает , а затем запустил демон mysql, убедившись, что мы указали ему использовать RAM-диск в качестве каталога данных, а не местоположение по умолчанию.
/usr/local/mysql/bin/mysqld \
--basedir=/usr/local/mysql \
--datadir=/Volumes/ramdisk \
--log-error=/Volumes/ramdisk/mysql.ramdisk.err \
--pid-file=/Volumes/ramdisk/mysql.ramdisk.pid \
--port=3306 \
--socket=/tmp/mysql_ram.sock
Затем я загрузил последний дамп базы данных на нашем промежуточном сайте с помощью drush, перед обновлением там, где на него указывает файл settings.php:
drush sql-dump > staging.project.database.dump.sql
Затем нужно было загрузить эти данные в локальную настройку тестирования. на оперативном диске. Это включало создание символической ссылки на сокет базы данных ramdisk и создание базы данных, предоставление прав пользователю mysql, указанному в установке drupal, а затем загрузку базы данных для запуска тестов. Пошагово:
Создание символической ссылки - это потому, что команда mysql по умолчанию ищет /tmp/mysql.sock
, и привязать его к нашему краткосрочному RAM-диску было проще, чем постоянно менять php.ini файлы
ln -s /tmp/mysql_ram.sock /tmp/mysql.sock
Создание базы данных (из командной строки в приглашении mysql)
CREATE DATABASE project_name;
GRANT ALL PRIVILEGES ON project_name.* to db_user@localhost IDENTIFIED BY 'db_password';
Загрузка содержимого в новую базу данных ...
mysql project_database < staging.project.database.dump.sql
... и, наконец, запуск тест из командной строки и использование Growlnotify, чтобы сообщить мне, когда тесты завершены
php ./scripts/run-tests.sh --verbose --class ClientFeatureTestCase testFeaturesCreateNewsItem ; growlnotify -w -m "Tests have finished."
Два тестовых примера все еще занимают около полутора минут, все еще необычно медленный - на порядки медленнее, чем другие фреймворки, которые я, возможно, использовал раньше.
Этот не может быть стандартным способом запуска тестов с Drupal, но я не смог найти никакой статистики о том, сколько времени мне следует ожидать набор тестов, который нужно взять с Drupal, чтобы сказать мне иное,