Похоже, что наибольшее увеличение скорости произойдет при запуске тестовой базы данных на оперативном диске, основанной на этом посте здесь Советы по настройке производительности для тестирования 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 для тестирования.Это, конечно, единственный путь.
У меня нет и не буду пробовать его на InnoDB в ближайшее время, если кто-то захочет пропустить шаг на skip-innodb ниже и попробовать его на tmpfs.
Также здесь есть некоторые инструкции для создания оперативного диска в OS X , хотя это для перемещения всего вашего набора баз данных mysql на оперативный диск, а не просто в одну базу данных:
Обновление - я попробовал этот подход сейчас с OS X и задокументировал то, что нашел
Мне удалось сократить на 30-50% отвремя тестирования путем переключения на оперативный диск.Вот шаги, которые я предпринял:
Создание оперативного диска
Я выбрал гигабайт в основном потому, что у меня 4 ГБ ОЗУ, и я не уверен, сколько местаМне может понадобиться, поэтому я играю безопасно:
diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2048000`
Установка mysql
Затем я запустил скрипт установки 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
, а символическая ссылка на наш краткосрочный оперативный диск была проще, чем постоянное изменение файлов php.ini
ln -s /tmp/mysql_ram.sock /tmp/mysql.sock
Создание базы данных (из строки comamnd в приглашении 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, чтобы сказать мне иначе,